Toast Engine
Toggle main menu visibility
Loading...
Searching...
No Matches
schema.hpp
Go to the documentation of this file.
1
8
9
#pragma once
10
11
#include "
core_types.hpp
"
12
#include "
data_value.hpp
"
13
14
#include <map>
15
#include <optional>
16
#include <string>
17
#include <vector>
18
19
namespace
assets {
20
21
struct
TOAST_API
TypeSwitchCase
{
22
std::string case_value;
23
DataType type {DataType::null};
24
std::optional<DataValue> default_value;
25
};
26
27
struct
TOAST_API
TypeSwitch
{
28
std::string
field
;
29
std::vector<TypeSwitchCase> cases;
30
};
31
35
struct
TOAST_API
SchemaField
{
36
std::string name;
37
DataType type {DataType::null};
38
39
bool
is_array {
false
};
40
std::string struct_type;
41
42
std::optional<DataValue> default_value;
43
std::string description;
44
45
std::optional<double> min;
46
std::optional<double> max;
47
48
std::string
asset_type
;
49
std::string
node_type
;
50
std::vector<std::string>
variants
;
51
std::vector<std::string>
enum_options
;
52
std::optional<TypeSwitch>
type_switch
;
53
54
std::vector<SchemaField> children;
55
};
56
60
class
TOAST_API Schema :
public
Asset {
61
public
:
62
explicit
Schema(std::string_view json_content);
63
64
[[nodiscard]]
65
auto
type()
const
-> std::string_view
override
{
66
return
"schema"
;
67
}
68
69
[[nodiscard]]
70
auto
title()
const
-> std::string_view {
71
return
m_title;
72
}
73
74
[[nodiscard]]
75
auto
isValid()
const
noexcept
->
bool
{
76
return
m_valid;
77
}
78
79
[[nodiscard]]
80
auto
fields()
const
->
const
std::vector<SchemaField>& {
81
return
m_fields;
82
}
83
84
[[nodiscard]]
85
auto
hasDefinition(std::string_view name)
const
noexcept
-> bool;
86
87
[[nodiscard]]
88
auto
getDefinition(std::string_view name)
const
->
const
std::vector<SchemaField>*;
89
90
[[nodiscard]]
91
auto
definitions()
const
->
const
std::map<std::string, std::vector<SchemaField>>& {
92
return
m_definitions;
93
}
94
96
[[nodiscard]]
97
auto
discriminatorOf
(std::string_view definition)
const
-> std::string_view;
98
99
private
:
100
std::string m_title;
101
bool
m_valid {
true
};
102
std::vector<SchemaField> m_fields;
103
std::map<std::string, std::vector<SchemaField>> m_definitions;
104
std::map<std::string, std::string> m_discriminators;
105
107
static
auto
parseOneField(
const
std::string& name,
const
json_t& properties) ->
SchemaField
;
108
110
static
void
parseFields(
const
json_t& properties, std::vector<SchemaField>& out);
111
113
static
auto
parseDefault(DataType t,
bool
is_array,
const
json_t& j_value) ->
DataValue
;
114
116
static
auto
toastTypeOf(
const
std::string& x_type) -> DataType;
117
123
void
resolveStructRefs(std::vector<SchemaField>& fields);
124
};
125
126
}
assets::DataValue
Typed value for TOML files.
Definition
data_value.hpp:50
assets::Schema::discriminatorOf
auto discriminatorOf(std::string_view definition) const -> std::string_view
Definition
schema.cpp:60
core_types.hpp
Base types for the asset system.
data_value.hpp
Recursive typed value for schema-driven TOML data assets.
assets::SchemaField
Descriptor for one field in a schema.
Definition
schema.hpp:35
assets::SchemaField::asset_type
std::string asset_type
x-toast-asset-type: asset subtype constraint for asset_t fields
Definition
schema.hpp:48
assets::SchemaField::enum_options
std::vector< std::string > enum_options
"enum": allowed string values, for x-toast-type "enum" fields
Definition
schema.hpp:51
assets::SchemaField::node_type
std::string node_type
x-toast-node-type: node subtype constraint for node_t fields
Definition
schema.hpp:49
assets::SchemaField::variants
std::vector< std::string > variants
x-toast-variants: discriminator values this field applies to
Definition
schema.hpp:50
assets::SchemaField::type_switch
std::optional< TypeSwitch > type_switch
x-toast-type-switch: type depends on a root controller field
Definition
schema.hpp:52
assets::TypeSwitchCase
Definition
schema.hpp:21
assets::TypeSwitch
Definition
schema.hpp:27
assets::TypeSwitch::field
std::string field
Name of the root-level controller field.
Definition
schema.hpp:28
engine
src
toast
assets
schema.hpp
Generated by
1.17.0