34 namespace fable::schema {
36 template <
typename T, std::enable_if_t<std::is_base_of_v<Confable, T>,
int> = 0>
44 this->type_ = schema_.
type();
49 , schema_(ptr->schema())
51 assert(ptr !=
nullptr);
55 [[nodiscard]]
Box get_confable_schema()
const {
return schema_.
clone(); }
60 this->augment_schema(j);
64 bool validate(
const Conf& c, std::optional<SchemaError>& err)
const override {
65 if (ptr_ ==
nullptr) {
68 return ptr_->validate(c, err);
73 assert(ptr_ !=
nullptr);
78 assert(ptr_ !=
nullptr);
82 [[nodiscard]]
Json serialize(
const Type& x)
const {
return x.to_json(); }
84 [[nodiscard]] Type deserialize(
const Conf& c)
const {
90 void serialize_into(Json& j,
const Type& x)
const { x.to_json(j); }
92 void deserialize_into(
const Conf& c, Type& x)
const { x.from_conf(c); }
104 template <
typename T>
105 FromConfable<T> make_schema(T* ptr, std::string desc) {
106 assert(ptr !=
nullptr);
107 return FromConfable<T>(ptr, std::move(desc));
Definition: interface.hpp:398
Definition: interface.hpp:297
Json json_schema() const override
Definition: interface.hpp:375
void reset_ptr() override
Definition: interface.hpp:381
std::unique_ptr< Interface > clone() const override
Definition: interface.hpp:368
JsonType type() const override
Definition: interface.hpp:369
bool validate(const Conf &c, std::optional< SchemaError > &err) const override
Definition: interface.hpp:376
Definition: confable.hpp:37
bool validate(const Conf &c, std::optional< SchemaError > &err) const override
Definition: confable.hpp:64
void to_json(Json &j) const override
Definition: confable.hpp:72
Json json_schema() const override
Definition: confable.hpp:58
void from_conf(const Conf &c) override
Definition: confable.hpp:77
void reset_ptr() override
Definition: confable.hpp:94
virtual Json to_json() const
Definition: interface.hpp:254
nlohmann::json Json
Definition: fable_fwd.hpp:35