Skip to content

Commit ddad44e

Browse files
authored
Revise JSON Schema public interface (#1502)
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
1 parent 97b4930 commit ddad44e

File tree

49 files changed

+1327
-1829
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1327
-1829
lines changed

src/core/jsonschema/default_walker.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <sourcemeta/core/jsonschema_walker.h>
22

3-
auto sourcemeta::core::default_schema_walker(
3+
auto sourcemeta::core::schema_official_walker(
44
std::string_view keyword, const std::map<std::string, bool> &vocabularies)
55
-> sourcemeta::core::SchemaWalkerResult {
66
#define WALK(vocabulary, _keyword, strategy, ...) \

src/core/jsonschema/include/sourcemeta/core/jsonschema.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ auto schema_format_compare(const JSON::String &left, const JSON::String &right)
339339
/// })JSON");
340340
///
341341
/// sourcemeta::core::relativize(schema,
342-
/// sourcemeta::core::default_schema_walker,
342+
/// sourcemeta::core::schema_official_walker,
343343
/// sourcemeta::core::official_resolver);
344344
///
345345
/// const sourcemeta::core::JSON expected =
@@ -375,7 +375,7 @@ auto relativize(
375375
/// })JSON");
376376
///
377377
/// sourcemeta::core::unidentify(schema,
378-
/// sourcemeta::core::default_schema_walker,
378+
/// sourcemeta::core::schema_official_walker,
379379
/// sourcemeta::core::official_resolver);
380380
///
381381
/// const sourcemeta::core::JSON expected =

src/core/jsonschema/include/sourcemeta/core/jsonschema_bundle.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ namespace sourcemeta::core {
4949
/// })JSON");
5050
///
5151
/// sourcemeta::core::bundle(document,
52-
/// sourcemeta::core::default_schema_walker, test_resolver);
52+
/// sourcemeta::core::schema_official_walker, test_resolver);
5353
///
5454
/// const sourcemeta::core::JSON expected =
5555
/// sourcemeta::core::parse_json(R"JSON({
@@ -106,7 +106,7 @@ auto bundle(sourcemeta::core::JSON &schema, const SchemaWalker &walker,
106106
///
107107
/// const sourcemeta::core::JSON result =
108108
/// sourcemeta::core::bundle(document,
109-
/// sourcemeta::core::default_schema_walker, test_resolver);
109+
/// sourcemeta::core::schema_official_walker, test_resolver);
110110
///
111111
/// const sourcemeta::core::JSON expected =
112112
/// sourcemeta::core::parse_json(R"JSON({

src/core/jsonschema/include/sourcemeta/core/jsonschema_frame.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ namespace sourcemeta::core {
4646
///
4747
/// sourcemeta::core::SchemaSchemaFrame frame;
4848
/// frame.analyse(document,
49-
/// sourcemeta::core::default_schema_walker,
49+
/// sourcemeta::core::schema_official_walker,
5050
/// sourcemeta::core::official_resolver);
5151
///
5252
/// // IDs

src/core/jsonschema/include/sourcemeta/core/jsonschema_transform.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaTransformRule {
163163
/// })JSON");
164164
///
165165
/// // Apply the transformation bundle to the schema
166-
/// bundle.apply(schema, sourcemeta::core::default_schema_walker,
166+
/// bundle.apply(schema, sourcemeta::core::schema_official_walker,
167167
/// sourcemeta::core::official_resolver);
168168
///
169169
/// // `foo` keywords are gone

src/core/jsonschema/include/sourcemeta/core/jsonschema_unevaluated.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ using SchemaUnevaluatedEntries = std::map<std::string, SchemaUnevaluatedEntry>;
5656
///
5757
/// sourcemeta::core::SchemaSchemaFrame frame;
5858
/// frame.analyse(document,
59-
/// sourcemeta::core::default_schema_walker,
59+
/// sourcemeta::core::schema_official_walker,
6060
/// sourcemeta::core::official_resolver);
6161
/// const auto result{sourcemeta::core::unevaluated(
6262
/// schema, frame,
63-
/// sourcemeta::core::default_schema_walker,
63+
/// sourcemeta::core::schema_official_walker,
6464
/// sourcemeta::core::official_resolver)};
6565
///
6666
/// assert(result.contains("#/unevaluatedProperties"));

src/core/jsonschema/include/sourcemeta/core/jsonschema_walker.h

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,16 @@ struct SchemaWalkerResult {
4343
///
4444
/// For convenience, we provide the following default walkers:
4545
///
46-
/// - sourcemeta::core::default_schema_walker
46+
/// - sourcemeta::core::schema_official_walker
4747
/// - sourcemeta::core::schema_walker_none
4848
using SchemaWalker = std::function<SchemaWalkerResult(
4949
std::string_view, const std::map<std::string, bool> &)>;
5050

51-
/// @ingroup jsonschema
52-
/// A stub walker that doesn't walk
53-
SOURCEMETA_CORE_JSONSCHEMA_EXPORT
54-
inline auto schema_walker_none(std::string_view,
55-
const std::map<std::string, bool> &)
56-
-> sourcemeta::core::SchemaWalkerResult {
57-
return {SchemaKeywordType::Unknown, std::nullopt, {}};
58-
}
59-
6051
/// @ingroup jsonschema
6152
/// A default schema walker with support for a wide range of drafs
6253
SOURCEMETA_CORE_JSONSCHEMA_EXPORT
63-
auto default_schema_walker(std::string_view keyword,
64-
const std::map<std::string, bool> &vocabularies)
54+
auto schema_official_walker(std::string_view keyword,
55+
const std::map<std::string, bool> &vocabularies)
6556
-> sourcemeta::core::SchemaWalkerResult;
6657

6758
/// @ingroup jsonschema
@@ -105,7 +96,7 @@ struct SchemaIteratorEntry {
10596
///
10697
/// for (const auto &entry :
10798
/// sourcemeta::core::SchemaIterator{
108-
/// document, sourcemeta::core::default_schema_walker,
99+
/// document, sourcemeta::core::schema_official_walker,
109100
/// sourcemeta::core::official_resolver}) {
110101
/// sourcemeta::core::prettify(
111102
/// sourcemeta::core::get(document, entry.pointer), std::cout);
@@ -172,7 +163,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIterator {
172163
///
173164
/// for (const auto &entry :
174165
/// sourcemeta::core::SchemaIteratorFlat{
175-
/// document, sourcemeta::core::default_schema_walker,
166+
/// document, sourcemeta::core::schema_official_walker,
176167
/// sourcemeta::core::official_resolver}) {
177168
/// sourcemeta::core::prettify(
178169
/// sourcemeta::core::get(document, entry.pointer), std::cout);
@@ -235,12 +226,12 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaIteratorFlat {
235226
///
236227
/// assert(sourcemeta::core::schema_keyword_priority(
237228
/// "prefixItems", vocabularies,
238-
/// sourcemeta::core::default_schema_walker) == 0);
229+
/// sourcemeta::core::schema_official_walker) == 0);
239230
///
240231
/// // The "items" keyword must be evaluated after the "prefixItems" keyword
241232
/// assert(sourcemeta::core::schema_keyword_priority(
242233
/// "items", vocabularies,
243-
/// sourcemeta::core::default_schema_walker) == 1);
234+
/// sourcemeta::core::schema_official_walker) == 1);
244235
/// ```
245236
auto SOURCEMETA_CORE_JSONSCHEMA_EXPORT schema_keyword_priority(
246237
std::string_view keyword, const std::map<std::string, bool> &vocabularies,
@@ -269,7 +260,7 @@ auto SOURCEMETA_CORE_JSONSCHEMA_EXPORT schema_keyword_priority(
269260
///
270261
/// for (const auto &entry :
271262
/// sourcemeta::core::SchemaKeywordIterator{
272-
/// document, sourcemeta::core::default_schema_walker,
263+
/// document, sourcemeta::core::schema_official_walker,
273264
/// sourcemeta::core::official_resolver}) {
274265
/// sourcemeta::core::stringify(entry.pointer, std::cout);
275266
/// std::cout << "\n";

src/core/jsonschema/resolver.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ auto SchemaMapResolver::add(const JSON &schema,
2222
// Registering the top-level schema is not enough. We need to check
2323
// and register every embedded schema resource too
2424
SchemaFrame frame;
25-
frame.analyse(schema, default_schema_walker, *this, default_dialect,
25+
frame.analyse(schema, schema_official_walker, *this, default_dialect,
2626
default_id);
2727

2828
for (const auto &[key, entry] : frame.locations()) {
@@ -150,7 +150,7 @@ auto SchemaFlatFileResolver::operator()(std::string_view identifier) const
150150
*this, result->second.default_dialect);
151151
// Because we allow re-identification, we can get into issues unless we
152152
// always try to relativize references
153-
sourcemeta::core::relativize(schema, default_schema_walker, *this,
153+
sourcemeta::core::relativize(schema, schema_official_walker, *this,
154154
result->second.default_dialect,
155155
result->second.original_identifier);
156156
sourcemeta::core::reidentify(schema, result->first, *this,

src/core/jsonschema/transformer.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ auto SchemaTransformer::apply(
4848

4949
// (2) Transform its sub-schemas
5050
for (const auto &entry :
51+
// TODO: Replace `SchemaIteratorFlat` with framing and then just get
52+
// rid of the idea of flat iterators, as we don't need it anywhere else
5153
SchemaIteratorFlat{current, walker, resolver, effective_dialect}) {
5254
apply(schema, walker, resolver, pointer.concat(entry.pointer),
5355
effective_dialect);

src/extension/alterschema/include/sourcemeta/core/alterschema.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ enum class AlterSchemaCategory {
7777
/// }
7878
/// })JSON");
7979
///
80-
/// bundle.apply(schema, sourcemeta::core::default_schema_walker,
80+
/// bundle.apply(schema, sourcemeta::core::schema_official_walker,
8181
/// sourcemeta::core::official_resolver);
8282
/// ```
8383
SOURCEMETA_CORE_ALTERSCHEMA_EXPORT

test/alterschema/alterschema_test_utils.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
sourcemeta::core::AlterSchemaCategory::Redundant); \
1717
sourcemeta::core::add(bundle, \
1818
sourcemeta::core::AlterSchemaCategory::SyntaxSugar); \
19-
bundle.apply(document, sourcemeta::core::default_schema_walker, \
19+
bundle.apply(document, sourcemeta::core::schema_official_walker, \
2020
sourcemeta::core::official_resolver);
2121

2222
#define LINT_AND_FIX_FOR_ANALYSIS(document) \
@@ -31,7 +31,7 @@
3131
sourcemeta::core::AlterSchemaCategory::Implicit); \
3232
sourcemeta::core::add(bundle, \
3333
sourcemeta::core::AlterSchemaCategory::Desugar); \
34-
bundle.apply(document, sourcemeta::core::default_schema_walker, \
34+
bundle.apply(document, sourcemeta::core::schema_official_walker, \
3535
sourcemeta::core::official_resolver);
3636

3737
#endif

test/jsonschema/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME jsonschema
7979
jsonschema_default_walker_draft2_test.cc
8080
jsonschema_default_walker_draft1_test.cc
8181
jsonschema_default_walker_draft0_test.cc
82-
jsonschema_walker_none_test.cc
8382
jsonschema_walker_test.cc
8483
jsonschema_error_test.cc
8584
jsonschema_keyword_iterator_test.cc

test/jsonschema/jsonschema_bundle_2019_09_test.cc

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ TEST(JSONSchema_bundle_2019_09, no_references_no_id) {
9292
"$schema": "https://json-schema.org/draft/2019-09/schema"
9393
})JSON");
9494

95-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
95+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
9696
test_resolver);
9797

9898
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
@@ -108,7 +108,7 @@ TEST(JSONSchema_bundle_2019_09, const_no_references_no_id) {
108108
})JSON");
109109

110110
const auto result = sourcemeta::core::bundle(
111-
document, sourcemeta::core::default_schema_walker, test_resolver);
111+
document, sourcemeta::core::schema_official_walker, test_resolver);
112112

113113
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
114114
"$schema": "https://json-schema.org/draft/2019-09/schema"
@@ -129,7 +129,7 @@ TEST(JSONSchema_bundle_2019_09, simple_with_id) {
129129
}
130130
})JSON");
131131

132-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
132+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
133133
test_resolver);
134134

135135
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
@@ -179,7 +179,7 @@ TEST(JSONSchema_bundle_2019_09, simple_without_id) {
179179
}
180180
})JSON");
181181

182-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
182+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
183183
test_resolver);
184184

185185
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
@@ -226,10 +226,10 @@ TEST(JSONSchema_bundle_2019_09, schema_not_found) {
226226
}
227227
})JSON");
228228

229-
EXPECT_THROW(sourcemeta::core::bundle(document,
230-
sourcemeta::core::default_schema_walker,
231-
test_resolver),
232-
sourcemeta::core::SchemaResolutionError);
229+
EXPECT_THROW(
230+
sourcemeta::core::bundle(
231+
document, sourcemeta::core::schema_official_walker, test_resolver),
232+
sourcemeta::core::SchemaResolutionError);
233233
}
234234

235235
TEST(JSONSchema_bundle_2019_09, idempotency) {
@@ -241,11 +241,11 @@ TEST(JSONSchema_bundle_2019_09, idempotency) {
241241
}
242242
})JSON");
243243

244-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
244+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
245245
test_resolver);
246-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
246+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
247247
test_resolver);
248-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
248+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
249249
test_resolver);
250250

251251
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
@@ -292,7 +292,7 @@ TEST(JSONSchema_bundle_2019_09, pre_embedded) {
292292
}
293293
})JSON");
294294

295-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
295+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
296296
test_resolver);
297297

298298
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
@@ -339,7 +339,7 @@ TEST(JSONSchema_bundle_2019_09, taken_definitions_entry) {
339339
}
340340
})JSON");
341341

342-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
342+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
343343
test_resolver);
344344

345345
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
@@ -376,7 +376,7 @@ TEST(JSONSchema_bundle_2019_09, recursive) {
376376
"$ref": "https://www.sourcemeta.com/recursive"
377377
})JSON");
378378

379-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
379+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
380380
test_resolver);
381381

382382
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
@@ -402,7 +402,7 @@ TEST(JSONSchema_bundle_2019_09, recursive_empty_fragment) {
402402
"$ref": "https://www.sourcemeta.com/recursive-empty-fragment#"
403403
})JSON");
404404

405-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
405+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
406406
test_resolver);
407407

408408
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
@@ -427,7 +427,7 @@ TEST(JSONSchema_bundle_2019_09, anonymous_no_dialect) {
427427
"$ref": "https://www.sourcemeta.com/anonymous"
428428
})JSON");
429429

430-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
430+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
431431
test_resolver,
432432
"https://json-schema.org/draft/2019-09/schema");
433433

@@ -450,7 +450,7 @@ TEST(JSONSchema_bundle_2019_09, metaschema) {
450450
"type": "string"
451451
})JSON");
452452

453-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
453+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
454454
test_resolver);
455455

456456
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
@@ -485,7 +485,7 @@ TEST(JSONSchema_bundle_2019_09, relative_base_uri_with_ref) {
485485
}
486486
})JSON");
487487

488-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
488+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
489489
test_resolver);
490490

491491
const sourcemeta::core::JSON expected = sourcemeta::core::parse_json(R"JSON({
@@ -508,7 +508,7 @@ TEST(JSONSchema_bundle_2019_09, hyperschema_smoke) {
508508
"$ref": "https://json-schema.org/draft/2019-09/hyper-schema"
509509
})JSON");
510510

511-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
511+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
512512
test_resolver);
513513

514514
EXPECT_TRUE(document.is_object());
@@ -523,7 +523,7 @@ TEST(JSONSchema_bundle_2019_09, hyperschema_1) {
523523
]
524524
})JSON");
525525

526-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
526+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
527527
test_resolver);
528528

529529
EXPECT_TRUE(document.defines("$defs"));
@@ -558,7 +558,7 @@ TEST(JSONSchema_bundle_2019_09, hyperschema_2) {
558558
"https://json-schema.org/draft/2019-09/hyper-schema")
559559
.value();
560560

561-
sourcemeta::core::bundle(document, sourcemeta::core::default_schema_walker,
561+
sourcemeta::core::bundle(document, sourcemeta::core::schema_official_walker,
562562
test_resolver);
563563

564564
EXPECT_TRUE(document.defines("$defs"));

0 commit comments

Comments
 (0)