Blaze 0.0.1
The ultra high-performance JSON Schema evaluator
Loading...
Searching...
No Matches
codegen_error.h
1#ifndef SOURCEMETA_BLAZE_CODEGEN_ERROR_H_
2#define SOURCEMETA_BLAZE_CODEGEN_ERROR_H_
3
4#ifndef SOURCEMETA_BLAZE_CODEGEN_EXPORT
5#include <sourcemeta/blaze/codegen_export.h>
6#endif
7
8#include <sourcemeta/core/json.h>
9#include <sourcemeta/core/jsonpointer.h>
10
11#include <exception> // std::exception
12#include <string> // std::string
13#include <string_view> // std::string_view
14#include <utility> // std::move
15
16namespace sourcemeta::blaze {
17
18// Exporting symbols that depends on the standard C++ library is considered
19// safe.
20// https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN
21#if defined(_MSC_VER)
22#pragma warning(disable : 4251 4275)
23#endif
24
27class SOURCEMETA_BLAZE_CODEGEN_EXPORT CodegenUnsupportedKeywordError
28 : public std::exception {
29public:
30 CodegenUnsupportedKeywordError(sourcemeta::core::JSON json,
31 sourcemeta::core::Pointer pointer,
32 std::string keyword, const char *message)
33 : json_{std::move(json)}, pointer_{std::move(pointer)},
34 keyword_{std::move(keyword)}, message_{message} {}
35 CodegenUnsupportedKeywordError(sourcemeta::core::JSON json,
36 const sourcemeta::core::WeakPointer &pointer,
37 std::string keyword, const char *message)
38 : CodegenUnsupportedKeywordError{std::move(json),
39 sourcemeta::core::to_pointer(pointer),
40 std::move(keyword), message} {}
41 CodegenUnsupportedKeywordError(sourcemeta::core::JSON json,
42 sourcemeta::core::Pointer pointer,
43 std::string keyword,
44 std::string message) = delete;
45 CodegenUnsupportedKeywordError(sourcemeta::core::JSON json,
46 sourcemeta::core::Pointer pointer,
47 std::string keyword,
48 std::string &&message) = delete;
49 CodegenUnsupportedKeywordError(sourcemeta::core::JSON json,
50 sourcemeta::core::Pointer pointer,
51 std::string keyword,
52 std::string_view message) = delete;
53
54 [[nodiscard]] auto what() const noexcept -> const char * override {
55 return this->message_;
56 }
57
58 [[nodiscard]] auto json() const noexcept -> const sourcemeta::core::JSON & {
59 return this->json_;
60 }
61
62 [[nodiscard]] auto pointer() const noexcept
63 -> const sourcemeta::core::Pointer & {
64 return this->pointer_;
65 }
66
67 [[nodiscard]] auto keyword() const noexcept -> std::string_view {
68 return this->keyword_;
69 }
70
71private:
72 sourcemeta::core::JSON json_;
73 sourcemeta::core::Pointer pointer_;
74 std::string keyword_;
75 const char *message_;
76};
77
80class SOURCEMETA_BLAZE_CODEGEN_EXPORT CodegenUnsupportedKeywordValueError
81 : public std::exception {
82public:
83 CodegenUnsupportedKeywordValueError(sourcemeta::core::JSON json,
84 sourcemeta::core::Pointer pointer,
85 std::string keyword, const char *message)
86 : json_{std::move(json)}, pointer_{std::move(pointer)},
87 keyword_{std::move(keyword)}, message_{message} {}
88 CodegenUnsupportedKeywordValueError(
89 sourcemeta::core::JSON json, const sourcemeta::core::WeakPointer &pointer,
90 std::string keyword, const char *message)
91 : CodegenUnsupportedKeywordValueError{
92 std::move(json), sourcemeta::core::to_pointer(pointer),
93 std::move(keyword), message} {}
94 CodegenUnsupportedKeywordValueError(sourcemeta::core::JSON json,
95 sourcemeta::core::Pointer pointer,
96 std::string keyword,
97 std::string message) = delete;
98 CodegenUnsupportedKeywordValueError(sourcemeta::core::JSON json,
99 sourcemeta::core::Pointer pointer,
100 std::string keyword,
101 std::string &&message) = delete;
102 CodegenUnsupportedKeywordValueError(sourcemeta::core::JSON json,
103 sourcemeta::core::Pointer pointer,
104 std::string keyword,
105 std::string_view message) = delete;
106
107 [[nodiscard]] auto what() const noexcept -> const char * override {
108 return this->message_;
109 }
110
111 [[nodiscard]] auto json() const noexcept -> const sourcemeta::core::JSON & {
112 return this->json_;
113 }
114
115 [[nodiscard]] auto pointer() const noexcept
116 -> const sourcemeta::core::Pointer & {
117 return this->pointer_;
118 }
119
120 [[nodiscard]] auto keyword() const noexcept -> std::string_view {
121 return this->keyword_;
122 }
123
124private:
125 sourcemeta::core::JSON json_;
126 sourcemeta::core::Pointer pointer_;
127 std::string keyword_;
128 const char *message_;
129};
130
133class SOURCEMETA_BLAZE_CODEGEN_EXPORT CodegenUnexpectedSchemaError
134 : public std::exception {
135public:
136 CodegenUnexpectedSchemaError(sourcemeta::core::JSON json,
137 sourcemeta::core::Pointer pointer,
138 const char *message)
139 : json_{std::move(json)}, pointer_{std::move(pointer)},
140 message_{message} {}
141 CodegenUnexpectedSchemaError(sourcemeta::core::JSON json,
142 const sourcemeta::core::WeakPointer &pointer,
143 const char *message)
144 : CodegenUnexpectedSchemaError{
145 std::move(json), sourcemeta::core::to_pointer(pointer), message} {}
146 CodegenUnexpectedSchemaError(sourcemeta::core::JSON json,
147 sourcemeta::core::Pointer pointer,
148 std::string message) = delete;
149 CodegenUnexpectedSchemaError(sourcemeta::core::JSON json,
150 sourcemeta::core::Pointer pointer,
151 std::string &&message) = delete;
152 CodegenUnexpectedSchemaError(sourcemeta::core::JSON json,
153 sourcemeta::core::Pointer pointer,
154 std::string_view message) = delete;
155
156 [[nodiscard]] auto what() const noexcept -> const char * override {
157 return this->message_;
158 }
159
160 [[nodiscard]] auto json() const noexcept -> const sourcemeta::core::JSON & {
161 return this->json_;
162 }
163
164 [[nodiscard]] auto pointer() const noexcept
165 -> const sourcemeta::core::Pointer & {
166 return this->pointer_;
167 }
168
169private:
170 sourcemeta::core::JSON json_;
171 sourcemeta::core::Pointer pointer_;
172 const char *message_;
173};
174
175#if defined(_MSC_VER)
176#pragma warning(default : 4251 4275)
177#endif
178
179} // namespace sourcemeta::blaze
180
181#endif