16 namespace json_details {
18 template<
typename JsonMember,
bool is_root =
false,
19 typename OutputIterator>
21 OutputIterator out_it ) {
22 if constexpr( not is_root ) {
26 if constexpr( not is_root ) {
32 template<
typename JsonMember,
bool is_root =
false,
33 typename OutputIterator>
35 OutputIterator out_it ) {
39 if constexpr( not is_root ) {
43 if constexpr( not is_root ) {
49 template<
typename JsonMember,
bool is_root =
false,
50 typename OutputIterator>
52 OutputIterator out_it ) {
54 if constexpr( not is_root ) {
58 out_it, R
"("type":"string","format":"date-time")" );
59 if constexpr( not is_root ) {
65 template<
typename JsonMember,
bool is_root =
false,
66 typename OutputIterator>
68 OutputIterator out_it ) {
70 if constexpr( not is_root ) {
74 if constexpr( not is_root ) {
80 template<
typename JsonMember,
bool is_root =
false,
81 typename OutputIterator>
83 OutputIterator out_it ) {
85 if constexpr( not is_root ) {
89 if constexpr( not is_root ) {
95 template<
typename JsonMember,
bool is_root =
false,
96 typename OutputIterator>
97 constexpr OutputIterator
99 OutputIterator out_it ) {
101 if constexpr( not is_root ) {
105 if constexpr( not is_root ) {
111 template<
typename JsonMember,
bool is_root =
false,
112 typename OutputIterator>
113 constexpr OutputIterator
115 OutputIterator out_it ) {
117 if constexpr( not is_root ) {
121 if constexpr( not is_root ) {
127 template<
typename JsonMember,
bool is_root =
false,
128 typename OutputIterator>
129 constexpr OutputIterator
131 OutputIterator out_it ) {
132 if constexpr( not is_root ) {
137 if constexpr( not is_root ) {
152 template<
typename JsonMember,
bool is_root =
false,
153 typename OutputIterator>
155 OutputIterator out_it );
166 template<
typename JsonMember,
bool is_root =
false,
167 typename OutputIterator>
169 OutputIterator out_it );
171 template<
typename JsonMember,
bool is_root =
false,
172 typename OutputIterator>
173 constexpr OutputIterator
175 OutputIterator out_it );
177 template<
typename JsonMember,
bool is_root =
false,
178 typename OutputIterator>
179 constexpr OutputIterator
181 OutputIterator out_it );
183 template<
typename JsonMember,
bool is_root =
false,
184 typename OutputIterator>
185 constexpr OutputIterator
187 OutputIterator out_it );
189 template<
typename JsonMember,
bool is_root =
false,
190 typename OutputIterator>
191 constexpr OutputIterator
193 OutputIterator out_it );
195 template<
typename,
typename>
198 template<
typename OutputIterator,
typename... JsonMembers>
202 static constexpr OutputIterator
process( OutputIterator out_it ) {
204 out_it, R
"("type":"object","properties":{)" );
205 out_it = output_member_types( out_it );
213 static constexpr
auto indexer =
214 std::index_sequence_for<JsonMembers...>{ };
216 template<
typename JsonMember>
217 static constexpr OutputIterator
218 output_member_type( OutputIterator &out_it,
bool &is_first ) {
227 out_it = to_json_schema<JsonMember>(
228 ParseTag<JsonMember::base_expected_type>{ }, out_it );
232 static constexpr OutputIterator
233 output_member_types( OutputIterator &out_it ) {
234 bool is_first =
true;
235 return static_cast<OutputIterator
>(
236 ( output_member_type<JsonMembers>( out_it, is_first ), ... ) );
239 template<
typename JsonMember>
240 static constexpr OutputIterator
241 output_required_member( OutputIterator &out_it,
bool &is_first ) {
255 static constexpr OutputIterator
257 bool is_first =
true;
258 return ( output_required_member<JsonMembers>( out_it, is_first ),
263 template<
typename OutputIterator,
typename... JsonMembers>
264 struct json_class_processor<OutputIterator,
267 static constexpr OutputIterator
process( OutputIterator out_it ) {
269 out_it, R
"("type":"object","properties":{)" );
270 out_it = output_member_types( out_it );
277 template<
typename JsonMember,
bool is_root,
typename OutputIterator>
279 OutputIterator out_it ) {
280 if constexpr( not is_root ) {
284 using json_class_processor_t = json_class_processor<
290 if constexpr( not is_root ) {
296 template<
typename JsonMember,
bool is_root,
typename OutputIterator>
298 OutputIterator out_it ) {
299 if constexpr( not is_root ) {
304 using element_t =
typename JsonMember::json_element_t;
305 out_it = to_json_schema<element_t>(
307 if constexpr( not is_root ) {
319 template<
typename T,
typename OutputIterator>
322 std::string_view title ) {
326 R
"("$schema":"https://json-schema.org/draft/2020-12/schema",)" );
334 out_it = json_details::to_json_schema<json_type, true>(
342 auto result = std::string( );
343 (void)to_json_schema<T>( std::back_inserter( result ), id, title );
struct daw::json::DAW_JSON_VER::json_details::json_class_processor< OutputIterator, json_member_list< JsonMembers... > > output_required_members(OutputIterator &out_it)
Definition: to_json_schema.h:256
constexpr OutputIterator to_json_schema(ParseTag< JsonParseTypes::Bool >, OutputIterator out_it)
Definition: to_json_schema.h:20
constexpr OutputIterator copy_to_iterator(OutputIterator it, Container const &container)
Definition: to_daw_json_string.h:393
constexpr OutputIterator to_json_schema(ParseTag< JsonParseTypes::Class >, OutputIterator out_it)
Definition: to_json_schema.h:278
typename json_data_contract< T >::type json_data_contract_trait_t
Definition: daw_json_traits.h:132
std::integral_constant< JsonParseTypes, v > ParseTag
Definition: daw_json_enums.h:119
json_details::ensure_mapped_t< json_details::json_deduced_type< T > > json_link_no_name
Definition: daw_json_link_types.h:1558
Definition: daw_from_json.h:22
static constexpr OutputIterator process(OutputIterator out_it)
Definition: to_json_schema.h:267
static constexpr OutputIterator process(OutputIterator out_it)
Definition: to_json_schema.h:202
Definition: to_json_schema.h:196
Definition: daw_json_link_types.h:33
Definition: daw_json_link_types.h:202
static constexpr OutputIterator process(OutputIterator out_it)
Definition: to_json_schema.h:258
#define DAW_JSON_VER
Definition: version.h:11