26 #ifndef FABLE_SCHEMA_VARIANT_HPP_ 27 #define FABLE_SCHEMA_VARIANT_HPP_ 38 using BoxVec = std::vector<Box>;
39 using BoxList = std::initializer_list<Box>;
62 Variant(std::string&& desc, std::initializer_list<Box> vec)
63 :
Variant(std::move(desc), std::vector<Box>(vec)) {}
66 Variant(std::string&& desc, std::vector<Box>&& vec);
72 std::string
type_string()
const override {
return type_string_; }
79 return std::move(*
this);
81 Variant required(
bool value) && {
83 return std::move(*
this);
86 bool has_description()
const {
return !desc_.empty(); }
89 const std::string&
description()
const override {
return desc_; }
91 desc_ = std::move(desc);
92 return std::move(*
this);
96 Variant unique_match(
bool value) && {
97 unique_match_ = value;
98 return std::move(*
this);
103 return std::move(*
this);
112 auto index = validate_index(c);
113 schemas_[index].from_conf(c);
119 size_t validate_index(
const Conf& c)
const;
123 std::vector<Box> schemas_;
124 bool required_{
false};
126 std::string type_string_{};
127 bool unique_match_{
false};
130 inline Variant make_schema(std::initializer_list<Box> vec) {
return Variant(vec); }
131 inline Variant make_schema(std::string&& desc, std::initializer_list<Box> vec) {
132 return Variant(std::move(desc), std::vector<Box>(vec));
135 inline Variant make_schema(std::vector<Box>&& vec) {
return Variant(std::move(vec)); }
136 inline Variant make_schema(std::string&& desc, std::vector<Box>&& vec) {
137 return Variant(std::move(desc), std::move(vec));
143 #endif // FABLE_SCHEMA_VARIANT_HPP_
Json usage() const override
Definition: variant.cpp:77
void validate(const Conf &c) const override
Definition: variant.hpp:109
std::string type_string() const override
Definition: variant.hpp:72
Interface * clone() const override
Definition: variant.hpp:69
void reset_ptr() override
Definition: variant.cpp:130
Definition: interface.hpp:263
Json json_schema() const override
Definition: variant.cpp:86
nlohmann::json Json
Definition: json.hpp:62
bool is_variant() const override
Definition: variant.hpp:73
Json::value_t JsonType
Definition: json.hpp:78
Definition: interface.hpp:72
bool is_required() const override
Definition: variant.hpp:76
const std::string & description() const override
Definition: variant.hpp:89
void to_json(Json &j) const override
Definition: variant.hpp:110
JsonType type() const override
Definition: variant.hpp:71
virtual Json to_json() const
Definition: interface.hpp:220
void from_conf(const Conf &c) override
Definition: variant.hpp:111
Definition: variant.hpp:59
void set_description(const std::string &s) override
Definition: variant.hpp:87