Skip to content

Commit 5d85198

Browse files
authored
Do not print valid intermediate errors on validate on success (#83)
See: asyncapi/spec-json-schemas#549 Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
1 parent d689652 commit 5d85198

File tree

4 files changed

+38
-29
lines changed

4 files changed

+38
-29
lines changed

src/command_test.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,15 @@ auto intelligence::jsonschema::cli::test(
4747
sourcemeta::jsontoolkit::metaschema(schema.value(), test_resolver),
4848
sourcemeta::jsontoolkit::default_schema_walker, test_resolver,
4949
sourcemeta::jsontoolkit::default_schema_compiler)};
50+
std::ostringstream error;
5051
if (sourcemeta::jsontoolkit::evaluate(
5152
metaschema_template, schema.value(),
5253
sourcemeta::jsontoolkit::SchemaCompilerEvaluationMode::Fast,
53-
pretty_evaluate_callback)) {
54+
pretty_evaluate_callback(error))) {
5455
log_verbose(options)
5556
<< "The schema is valid with respect to its metaschema\n";
5657
} else {
58+
std::cerr << error.str();
5759
std::cerr << "The schema is NOT valid with respect to its metaschema\n";
5860
return EXIT_FAILURE;
5961
}

src/command_validate.cc

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,18 @@ auto intelligence::jsonschema::cli::validate(
2828
sourcemeta::jsontoolkit::metaschema(schema, custom_resolver),
2929
sourcemeta::jsontoolkit::default_schema_walker, custom_resolver,
3030
sourcemeta::jsontoolkit::default_schema_compiler)};
31+
std::ostringstream error;
3132
if (sourcemeta::jsontoolkit::evaluate(
3233
metaschema_template, schema,
3334
sourcemeta::jsontoolkit::SchemaCompilerEvaluationMode::Fast,
34-
pretty_evaluate_callback)) {
35+
pretty_evaluate_callback(error))) {
3536
log_verbose(options)
36-
<< "The schema is valid with respect to its metaschema\n";
37+
<< schema_path
38+
<< ": The schema is valid with respect to its metaschema\n";
3739
} else {
38-
std::cerr << "The schema is NOT valid with respect to its metaschema\n";
40+
std::cerr << error.str();
41+
std::cerr << schema_path
42+
<< ": The schema is NOT valid with respect to its metaschema\n";
3943
return EXIT_FAILURE;
4044
}
4145
}
@@ -49,13 +53,16 @@ auto intelligence::jsonschema::cli::validate(
4953

5054
const auto instance{sourcemeta::jsontoolkit::from_file(instance_path)};
5155

56+
std::ostringstream error;
5257
result = sourcemeta::jsontoolkit::evaluate(
5358
schema_template, instance,
5459
sourcemeta::jsontoolkit::SchemaCompilerEvaluationMode::Fast,
55-
pretty_evaluate_callback);
60+
pretty_evaluate_callback(error));
5661

5762
if (result) {
5863
log_verbose(options) << "Valid\n";
64+
} else {
65+
std::cerr << error.str();
5966
}
6067
}
6168

src/utils.cc

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -130,25 +130,29 @@ auto parse_options(const std::span<const std::string> &arguments,
130130
return options;
131131
}
132132

133-
auto pretty_evaluate_callback(
134-
bool result,
135-
const sourcemeta::jsontoolkit::SchemaCompilerTemplate::value_type &step,
136-
const sourcemeta::jsontoolkit::Pointer &evaluate_path,
137-
const sourcemeta::jsontoolkit::Pointer &instance_location,
138-
const sourcemeta::jsontoolkit::JSON &,
139-
const sourcemeta::jsontoolkit::JSON &) -> void {
140-
if (result) {
141-
return;
142-
}
133+
auto pretty_evaluate_callback(std::ostringstream &output)
134+
-> sourcemeta::jsontoolkit::SchemaCompilerEvaluationCallback {
135+
return [&output](
136+
bool result,
137+
const sourcemeta::jsontoolkit::SchemaCompilerTemplate::value_type
138+
&step,
139+
const sourcemeta::jsontoolkit::Pointer &evaluate_path,
140+
const sourcemeta::jsontoolkit::Pointer &instance_location,
141+
const sourcemeta::jsontoolkit::JSON &,
142+
const sourcemeta::jsontoolkit::JSON &) -> void {
143+
if (result) {
144+
return;
145+
}
143146

144-
std::cerr << "error: " << sourcemeta::jsontoolkit::describe(step) << "\n";
145-
std::cerr << " at instance location \"";
146-
sourcemeta::jsontoolkit::stringify(instance_location, std::cerr);
147-
std::cerr << "\"\n";
147+
output << "error: " << sourcemeta::jsontoolkit::describe(step) << "\n";
148+
output << " at instance location \"";
149+
sourcemeta::jsontoolkit::stringify(instance_location, output);
150+
output << "\"\n";
148151

149-
std::cerr << " at evaluate path \"";
150-
sourcemeta::jsontoolkit::stringify(evaluate_path, std::cerr);
151-
std::cerr << "\"\n";
152+
output << " at evaluate path \"";
153+
sourcemeta::jsontoolkit::stringify(evaluate_path, output);
154+
output << "\"\n";
155+
};
152156
}
153157

154158
static auto fallback_resolver(

src/utils.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <ostream> // std::ostream
1111
#include <set> // std::set
1212
#include <span> // std::span
13+
#include <sstream> // std::ostringstream
1314
#include <string> // std::string
1415
#include <utility> // std::pair
1516
#include <vector> // std::vector
@@ -31,13 +32,8 @@ auto for_each_json(const std::vector<std::string> &arguments,
3132
-> std::vector<
3233
std::pair<std::filesystem::path, sourcemeta::jsontoolkit::JSON>>;
3334

34-
auto pretty_evaluate_callback(
35-
bool result,
36-
const sourcemeta::jsontoolkit::SchemaCompilerTemplate::value_type &,
37-
const sourcemeta::jsontoolkit::Pointer &evaluate_path,
38-
const sourcemeta::jsontoolkit::Pointer &instance_location,
39-
const sourcemeta::jsontoolkit::JSON &,
40-
const sourcemeta::jsontoolkit::JSON &) -> void;
35+
auto pretty_evaluate_callback(std::ostringstream &)
36+
-> sourcemeta::jsontoolkit::SchemaCompilerEvaluationCallback;
4137

4238
auto resolver(const std::map<std::string, std::vector<std::string>> &options,
4339
const bool remote = false)

0 commit comments

Comments
 (0)