25 #ifndef FABLE_SCHEMA_NUMBER_HPP_ 26 #define FABLE_SCHEMA_NUMBER_HPP_ 28 #include <initializer_list> 31 #include <type_traits> 40 static_assert(std::is_arithmetic<T>::value,
"arithmetic value required");
45 template <typename X = T, std::enable_if_t<std::is_integral<X>::value && std::is_unsigned<X>::value,
int> = 0>
46 Number(Type* ptr, std::string&& desc)
47 :
Base<Number<T>>(JsonType::number_unsigned, std::move(desc)), ptr_(ptr) {}
49 template <typename X = T, std::enable_if_t<std::is_integral<X>::value && std::is_signed<X>::value,
int> = 0>
50 Number(Type* ptr, std::string&& desc)
51 :
Base<Number<T>>(JsonType::number_integer, std::move(desc)), ptr_(ptr) {}
53 template <typename X = T, std::enable_if_t<std::is_floating_point<X>::value,
int> = 0>
54 Number(Type* ptr, std::string&& desc)
55 :
Base<Number<T>>(JsonType::number_float, std::move(desc)), ptr_(ptr) {}
59 T minimum()
const {
return value_min_; }
60 bool exclusive_minimum()
const {
return exclusive_min_; }
64 T maximum()
const {
return value_max_; }
65 bool exclusive_maximum()
const {
return exclusive_max_; }
69 std::pair<T, T> bounds()
const;
71 Number<T> bounds_with(T min, T max, std::initializer_list<T> whitelisted) &&;
73 const std::set<T>& whitelist()
const {
return whitelist_; }
75 Number<T> whitelist(std::initializer_list<T> xs) &&;
76 void insert_whitelist(T x);
78 const std::set<T>& blacklist()
const {
return blacklist_; }
80 Number<T> blacklist(std::initializer_list<T> xs) &&;
81 void insert_blacklist(T x);
89 Json serialize(
const Type& x)
const;
90 Type deserialize(
const Conf& c)
const;
95 void check_bounds(
const Conf& c)
const;
98 bool exclusive_min_{
false};
99 bool exclusive_max_{
false};
100 T value_min_{std::numeric_limits<T>::lowest()};
101 T value_max_{std::numeric_limits<T>::max()};
102 std::set<T> whitelist_{};
103 std::set<T> blacklist_{};
107 template <
typename T,
108 std::enable_if_t<std::is_arithmetic<T>::value && !std::is_enum<T>::value,
int> = 0>
109 inline Number<T> make_schema(T* ptr, std::string&& desc) {
116 #endif // FABLE_SCHEMA_NUMBER_HPP_
void from_conf(const Conf &c) override
Definition: number_impl.hpp:203
Definition: number.hpp:39
Json json_schema() const override
Definition: number_impl.hpp:147
nlohmann::json Json
Definition: json.hpp:62
virtual Json to_json() const
Definition: interface.hpp:220
void reset_ptr() override
Definition: number_impl.hpp:215
void validate(const Conf &c) const override
Definition: number_impl.hpp:174
Definition: interface.hpp:354