Skip to content

Commit ac96b70

Browse files
authored
Implement proper custom resolution support (#10)
Signed-off-by: Juan Cruz Viotti <[email protected]>
1 parent 55c6daa commit ac96b70

File tree

9 files changed

+196
-48
lines changed

9 files changed

+196
-48
lines changed

DEPENDENCIES

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
vendorpull https://github.com/sourcemeta/vendorpull dea311b5bfb53b6926a4140267959ae334d3ecf4
22
noa https://github.com/sourcemeta/noa 5ff4024902642afc9cc2f9a9e02ae9dff9d15d4f
3-
jsontoolkit https://github.com/sourcemeta/jsontoolkit 162faf07f453c88849f8259bdfa8a6d74c2f279b
3+
jsontoolkit https://github.com/sourcemeta/jsontoolkit dc7e1e21853f2b26cac572d5dc4c3dc50eeda935

src/utils.cc

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -119,41 +119,24 @@ auto pretty_evaluate_callback(
119119

120120
auto resolver(const std::map<std::string, std::vector<std::string>> &options)
121121
-> sourcemeta::jsontoolkit::SchemaResolver {
122-
if (!options.contains("resolve") && !options.contains("r")) {
123-
return sourcemeta::jsontoolkit::official_resolver;
124-
}
122+
sourcemeta::jsontoolkit::MapSchemaResolver dynamic_resolver{
123+
sourcemeta::jsontoolkit::official_resolver};
125124

126-
std::map<std::string, sourcemeta::jsontoolkit::JSON> schemas;
127-
const std::string option{options.contains("resolve") ? "resolve" : "r"};
128-
for (const auto &schema_path : options.at(option)) {
129-
const auto schema{sourcemeta::jsontoolkit::from_file(schema_path)};
130-
// TODO: Use the current resolver as its building up
131-
const auto id{sourcemeta::jsontoolkit::id(
132-
schema, sourcemeta::jsontoolkit::official_resolver)
133-
.get()};
134-
if (!id.has_value()) {
135-
std::ostringstream error;
136-
error << "Cannot determine the identifier of the schema: " << schema_path;
137-
throw std::runtime_error(error.str());
125+
if (options.contains("resolve")) {
126+
for (const auto &schema_path : options.at("resolve")) {
127+
log_verbose(options) << "Loading schema: " << schema_path << "\n";
128+
dynamic_resolver.add(sourcemeta::jsontoolkit::from_file(schema_path));
138129
}
139-
140-
// TODO: Throw if we are overriding with a duplicate id
141-
// TODO: We need to frame to add subschemas too?
142-
schemas.insert({id.value(), schema});
143-
log_verbose(options) << "Loading schema: " << schema_path << "\n";
144130
}
145131

146-
return [schemas](std::string_view identifier)
147-
-> std::future<std::optional<sourcemeta::jsontoolkit::JSON>> {
148-
const std::string string_identifier{identifier};
149-
if (schemas.contains(string_identifier)) {
150-
std::promise<std::optional<sourcemeta::jsontoolkit::JSON>> promise;
151-
promise.set_value(schemas.at(string_identifier));
152-
return promise.get_future();
132+
if (options.contains("r")) {
133+
for (const auto &schema_path : options.at("r")) {
134+
log_verbose(options) << "Loading schema: " << schema_path << "\n";
135+
dynamic_resolver.add(sourcemeta::jsontoolkit::from_file(schema_path));
153136
}
137+
}
154138

155-
return sourcemeta::jsontoolkit::official_resolver(identifier);
156-
};
139+
return dynamic_resolver;
157140
}
158141

159142
auto log_verbose(const std::map<std::string, std::vector<std::string>> &options)

vendor/jsontoolkit/Makefile.uk

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/jsontoolkit/src/jsonschema/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_reference.h

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_resolver.h

Lines changed: 59 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_walker.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/jsontoolkit/src/jsonschema/reference.cc

Lines changed: 19 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/jsontoolkit/src/jsonschema/resolver.cc

Lines changed: 88 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)