@@ -322,78 +322,58 @@ auto repopulate_instance_locations(
322
322
323
323
namespace sourcemeta ::core {
324
324
325
+ auto to_json (const SchemaReferenceType value) -> JSON {
326
+ return JSON{value == SchemaReferenceType::Static ? " static" : " dynamic" };
327
+ }
328
+
329
+ auto to_json (const SchemaFrame::LocationType value) -> JSON {
330
+ switch (value) {
331
+ case SchemaFrame::LocationType::Resource:
332
+ return JSON{" resource" };
333
+ case SchemaFrame::LocationType::Anchor:
334
+ return JSON{" anchor" };
335
+ case SchemaFrame::LocationType::Pointer:
336
+ return JSON{" pointer" };
337
+ case SchemaFrame::LocationType::Subschema:
338
+ return JSON{" subschema" };
339
+ default :
340
+ assert (false );
341
+ return JSON{nullptr };
342
+ }
343
+ }
344
+
325
345
auto SchemaFrame::to_json () const -> JSON {
326
346
auto root{JSON::make_object ()};
327
347
328
348
root.assign (" locations" , JSON::make_array ());
329
349
for (const auto &location : this ->locations_ ) {
330
350
auto entry{JSON::make_object ()};
331
351
entry.assign (" referenceType" ,
332
- JSON{location.first .first == SchemaReferenceType::Static
333
- ? " static"
334
- : " dynamic" });
335
- entry.assign (" uri" , JSON{location.first .second });
336
-
337
- if (location.second .parent .has_value ()) {
338
- entry.assign (" parent" , JSON{to_string (location.second .parent .value ())});
339
- } else {
340
- entry.assign (" parent" , JSON{nullptr });
341
- }
342
-
343
- switch (location.second .type ) {
344
- case LocationType::Resource:
345
- entry.assign (" type" , JSON{" resource" });
346
- break ;
347
- case LocationType::Anchor:
348
- entry.assign (" type" , JSON{" anchor" });
349
- break ;
350
- case LocationType::Pointer:
351
- entry.assign (" type" , JSON{" pointer" });
352
- break ;
353
- case LocationType::Subschema:
354
- entry.assign (" type" , JSON{" subschema" });
355
- break ;
356
- default :
357
- assert (false );
358
- }
359
-
360
- if (location.second .root .has_value ()) {
361
- entry.assign (" root" , JSON{location.second .root .value ()});
362
- } else {
363
- entry.assign (" root" , JSON{nullptr });
364
- }
365
-
366
- entry.assign (" base" , JSON{location.second .base });
367
- entry.assign (" pointer" , JSON{to_string (location.second .pointer )});
352
+ sourcemeta::core::to_json (location.first .first ));
353
+ entry.assign (" uri" , sourcemeta::core::to_json (location.first .second ));
354
+ entry.assign (" parent" , sourcemeta::core::to_json (location.second .parent ));
355
+ entry.assign (" type" , sourcemeta::core::to_json (location.second .type ));
356
+ entry.assign (" root" , sourcemeta::core::to_json (location.second .root ));
357
+ entry.assign (" base" , sourcemeta::core::to_json (location.second .base ));
358
+ entry.assign (" pointer" , sourcemeta::core::to_json (location.second .pointer ));
368
359
entry.assign (" relativePointer" ,
369
- JSON{to_string (location.second .relative_pointer )});
370
- entry.assign (" dialect" , JSON{location.second .dialect });
371
- entry.assign (" baseDialect" , JSON{location.second .base_dialect });
360
+ sourcemeta::core::to_json (location.second .relative_pointer ));
361
+ entry.assign (" dialect" , sourcemeta::core::to_json (location.second .dialect ));
362
+ entry.assign (" baseDialect" ,
363
+ sourcemeta::core::to_json (location.second .base_dialect ));
372
364
root.at (" locations" ).push_back (std::move (entry));
373
365
}
374
366
375
367
root.assign (" references" , JSON::make_array ());
376
368
for (const auto &reference : this ->references_ ) {
377
369
auto entry{JSON::make_object ()};
378
- entry.assign (" type" ,
379
- JSON{reference.first .first == SchemaReferenceType::Static
380
- ? " static"
381
- : " dynamic" });
382
- entry.assign (" origin" , JSON{to_string (reference.first .second )});
383
- entry.assign (" destination" , JSON{reference.second .destination });
384
-
385
- if (reference.second .base .has_value ()) {
386
- entry.assign (" base" , JSON{reference.second .base .value ()});
387
- } else {
388
- entry.assign (" base" , JSON{nullptr });
389
- }
390
-
391
- if (reference.second .fragment .has_value ()) {
392
- entry.assign (" fragment" , JSON{reference.second .fragment .value ()});
393
- } else {
394
- entry.assign (" fragment" , JSON{nullptr });
395
- }
396
-
370
+ entry.assign (" type" , sourcemeta::core::to_json (reference.first .first ));
371
+ entry.assign (" origin" , sourcemeta::core::to_json (reference.first .second ));
372
+ entry.assign (" destination" ,
373
+ sourcemeta::core::to_json (reference.second .destination ));
374
+ entry.assign (" base" , sourcemeta::core::to_json (reference.second .base ));
375
+ entry.assign (" fragment" ,
376
+ sourcemeta::core::to_json (reference.second .fragment ));
397
377
root.at (" references" ).push_back (std::move (entry));
398
378
}
399
379
@@ -408,7 +388,7 @@ auto SchemaFrame::to_json() const -> JSON {
408
388
// TODO: Overload .to_string() for PointerTemplate
409
389
std::ostringstream result;
410
390
sourcemeta::core::stringify (pointer, result);
411
- entry.push_back (JSON{ result.str ()} );
391
+ entry.push_back (sourcemeta::core::to_json ( result.str ()) );
412
392
}
413
393
414
394
root.at (" instances" ).assign (to_string (instance.first ), std::move (entry));
0 commit comments