116 #ifndef FABLE_SCHEMA_HPP_ 117 #define FABLE_SCHEMA_HPP_ 123 #include <type_traits> 127 #include <boost/optional.hpp> 154 using schema::make_const_schema;
155 using schema::make_const_str;
156 using schema::make_prototype;
157 using schema::make_schema;
166 template <
typename T>
168 using type = decltype(make_schema(static_cast<T*>(
nullptr),
""));
186 Schema(std::string&& desc, schema::PropertyList<> props)
189 Schema(schema::PropertyList<> props) :
Schema(
"", props) {}
191 Schema(std::string&& desc,
const Schema& base, schema::PropertyList<> props)
197 Schema(
const std::vector<Schema>& xs);
198 Schema(std::string&& desc,
const std::vector<Schema>& xs);
200 Schema(schema::BoxList props);
201 Schema(std::string&& desc, schema::BoxList props);
203 Schema(schema::BoxVec&& props);
204 Schema(std::string&& desc, schema::BoxVec&& props);
207 template <typename T, std::enable_if_t<std::is_base_of<schema::Interface, T>::value,
int> = 0>
208 Schema(
const T& value) : impl_(value.clone()) {}
210 Schema(std::shared_ptr<schema::Interface> i) : impl_(std::move(i)) {
216 explicit Schema(std::string&& desc,
JsonType t = JsonType::object)
220 template <
typename T>
221 Schema(T* ptr, std::string&& desc) : impl_(make_schema(ptr, std::move(desc)).clone()) {}
222 template <
typename T>
224 : impl_(make_schema(ptr, prototype, std::move(desc)).clone()) {}
227 template <
typename T>
232 Schema reset_pointer() && {
234 return std::move(*
this);
237 Json json_schema_qualified()
const {
238 Json j = impl_->json_schema();
239 j[
"$schema"] =
"http://json-schema.org/draft-07/schema#";
243 Json json_schema_qualified(
const std::string&
id)
const {
244 Json j = json_schema_qualified();
249 friend void to_json(
Json& j,
const Schema& s) { s.impl_->to_json(j); }
252 using Interface::to_json;
254 Interface*
clone()
const override {
return impl_->clone(); }
256 std::string
type_string()
const override {
return impl_->type_string(); }
257 bool is_required()
const override {
return impl_->is_required(); }
258 const std::string&
description()
const override {
return impl_->description(); }
259 void set_description(
const std::string& s)
override {
return impl_->set_description(s); }
268 std::shared_ptr<schema::Interface> impl_{
nullptr};
273 #endif // FABLE_SCHEMA_HPP_
bool is_required() const override
Definition: schema.hpp:257
Definition: ignore.hpp:46
const std::string & description() const override
Definition: schema.hpp:258
Definition: interface.hpp:263
void validate(const Conf &c) const override
Definition: schema.hpp:262
nlohmann::json Json
Definition: json.hpp:62
JsonType type() const override
Definition: schema.hpp:255
void reset_ptr() override
Definition: schema.hpp:265
Json::value_t JsonType
Definition: json.hpp:78
Definition: interface.hpp:72
Definition: schema.hpp:178
void from_conf(const Conf &c) override
Definition: schema.hpp:264
Definition: struct.hpp:73
Json json_schema() const override
Definition: schema.hpp:261
std::string type_string() const override
Definition: schema.hpp:256
Definition: schema.hpp:167
Interface * clone() const override
Definition: schema.hpp:254
Json usage() const override
Definition: schema.hpp:260
void set_description(const std::string &s) override
Definition: schema.hpp:259
void to_json(Json &j) const override
Definition: schema.hpp:263