33 namespace fable::schema {
35 template <
typename T, std::enable_if_t<std::is_base_of_v<Confable, T>,
int> = 0>
40 template <std::enable_if_t<std::is_default_constructible_v<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); }
105 typename T,
typename S,
106 std::enable_if_t<std::is_base_of_v<Confable, T> && std::is_default_constructible_v<T>,
int> = 0>
107 FromConfable<T> make_schema(T* ptr, S&& desc) {
108 if (ptr ==
nullptr) {
109 return {std::forward<S>(desc)};
111 return {ptr, std::forward<S>(desc)};
114 template <
typename T,
typename S,
115 std::enable_if_t<std::is_base_of_v<Confable, T> && !std::is_default_constructible_v<T>,
117 FromConfable<T> make_schema(T* ptr, S&& desc) {
118 if (ptr ==
nullptr) {
121 throw std::invalid_argument(
"make_schema(FromConfable*, S&&) requires a valid pointer");
123 return {ptr, std::forward<S>(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:36
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