10#include <unordered_map>
11#include <unordered_set>
15#include <userver/formats/yaml_fwd.hpp>
17USERVER_NAMESPACE_BEGIN
32std::string ToString(FieldType type);
34class SchemaPtr
final {
36 explicit SchemaPtr(Schema&& schema);
38 SchemaPtr(SchemaPtr&&)
noexcept =
default;
39 SchemaPtr& operator=(SchemaPtr&&)
noexcept =
default;
40 SchemaPtr(
const SchemaPtr&);
41 SchemaPtr& operator=(
const SchemaPtr&);
43 const Schema& operator*()
const;
45 const Schema* operator->()
const {
return &**
this; }
46 Schema* operator->() {
return &**
this; }
48 bool operator==(
const SchemaPtr&)
const;
51 std::unique_ptr<Schema> schema_;
62 void UpdateDescription(std::string new_description);
64 static Schema EmptyObject();
66 bool operator==(
const Schema&)
const;
71 std::string description;
72 std::optional<std::string> default_description;
73 std::optional<std::variant<
bool, SchemaPtr>> additional_properties;
74 std::optional<std::unordered_map<std::string, SchemaPtr>> properties;
75 std::optional<SchemaPtr> items;
76 std::optional<std::unordered_set<std::string>> enum_values;
77 std::optional<
double> minimum;
78 std::optional<
double> maximum;
79 std::optional<std::size_t> min_items;
80 std::optional<std::size_t> max_items;
89Schema SchemaFromString(
const std::string& yaml_string);
90Schema SchemaFromResource(std::string_view resource_name);