Blaze 0.0.1
The ultra high-performance JSON Schema evaluator
 
Loading...
Searching...
No Matches
output_trace.h
1#ifndef SOURCEMETA_BLAZE_OUTPUT_TRACE_H_
2#define SOURCEMETA_BLAZE_OUTPUT_TRACE_H_
3
4#ifndef SOURCEMETA_BLAZE_OUTPUT_EXPORT
5#include <sourcemeta/blaze/output_export.h>
6#endif
7
8#include <sourcemeta/blaze/evaluator.h>
9#include <sourcemeta/blaze/foundation.h>
10#include <sourcemeta/blaze/frame.h>
11
12#include <sourcemeta/core/json.h>
13#include <sourcemeta/core/jsonpointer.h>
14
15#include <cstdint> // std::uint8_t
16#include <functional> // std::function, std::reference_wrapper
17#include <optional> // std::optional, std::nullopt
18#include <string_view> // std::string_view
19#include <utility> // std::pair
20
21namespace sourcemeta::blaze {
22
62class SOURCEMETA_BLAZE_OUTPUT_EXPORT TraceOutput {
63public:
64 enum class EntryType : std::uint8_t { Push, Pass, Fail, Annotation };
65
66 // NOLINTNEXTLINE(bugprone-exception-escape)
67 struct Entry {
68 // NOLINTBEGIN(cppcoreguidelines-avoid-const-or-ref-data-members)
69 const EntryType type;
70 const std::string_view name;
71 const sourcemeta::core::WeakPointer &instance_location;
72 const sourcemeta::core::WeakPointer &evaluate_path;
73 const std::string_view keyword_location;
74 const sourcemeta::core::JSON &annotation;
75 const std::pair<bool, std::optional<sourcemeta::blaze::Vocabularies::URI>>
76 &vocabulary;
77 // NOLINTEND(cppcoreguidelines-avoid-const-or-ref-data-members)
78 };
79
80 // TODO(C++23): Use std::move_only_function when available in libc++
81 using Callback = std::function<void(const Entry &)>;
82
85 sourcemeta::blaze::SchemaResolver resolver, Callback callback,
86 sourcemeta::core::WeakPointer base = sourcemeta::core::empty_weak_pointer,
87 const std::optional<
88 std::reference_wrapper<const sourcemeta::blaze::SchemaFrame>> &frame =
89 std::nullopt);
90
91 // Prevent accidental copies
92 TraceOutput(const TraceOutput &) = delete;
93 auto operator=(const TraceOutput &) -> TraceOutput & = delete;
94
95 auto operator()(const EvaluationType type, const bool result,
96 const Instruction &step,
97 const InstructionExtra &step_metadata,
98 const sourcemeta::core::WeakPointer &evaluate_path,
99 const sourcemeta::core::WeakPointer &instance_location,
100 const sourcemeta::core::JSON &annotation) -> void;
101
102private:
103// Exporting symbols that depends on the standard C++ library is considered
104// safe.
105// https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN
106#if defined(_MSC_VER)
107#pragma warning(disable : 4251)
108#endif
110 const sourcemeta::blaze::SchemaResolver resolver_;
111 const sourcemeta::core::WeakPointer base_;
112 const std::optional<
113 std::reference_wrapper<const sourcemeta::blaze::SchemaFrame>>
114 frame_;
115 Callback callback_;
116 std::vector<
117 std::pair<bool, std::optional<sourcemeta::blaze::Vocabularies::URI>>>
118 vocabulary_stack_;
119#if defined(_MSC_VER)
120#pragma warning(default : 4251)
121#endif
122};
123
124} // namespace sourcemeta::blaze
125
126#endif
EvaluationType
Definition evaluator.h:56
Definition evaluator_instruction.h:265
Definition evaluator_instruction.h:256
std::function< const SchemaWalkerResult &(std::string_view, const Vocabularies &)> SchemaWalker
Definition foundation_types.h:217
std::function< std::optional< sourcemeta::core::JSON >(std::string_view)> SchemaResolver
Definition foundation_types.h:33
@ Annotation
The JSON Schema keyword is a non-applicator annotation.
Definition output_trace.h:62
Definition output_trace.h:67