1#ifndef SOURCEMETA_BLAZE_CODEGEN_H_
2#define SOURCEMETA_BLAZE_CODEGEN_H_
4#ifndef SOURCEMETA_BLAZE_CODEGEN_EXPORT
5#include <sourcemeta/blaze/codegen_export.h>
9#include <sourcemeta/blaze/codegen_error.h>
10#include <sourcemeta/blaze/codegen_typescript.h>
13#include <sourcemeta/core/json.h>
14#include <sourcemeta/core/jsonpointer.h>
15#include <sourcemeta/core/jsonschema.h>
31namespace sourcemeta::blaze {
34enum class CodegenIRScalarType : std::uint8_t {
44 sourcemeta::core::Pointer pointer;
45 std::vector<std::string> symbol;
50 CodegenIRScalarType value;
55 std::vector<sourcemeta::core::JSON> values;
60 std::vector<CodegenIRType> values;
65 std::vector<CodegenIRType> values;
76 std::optional<std::string> prefix;
82 std::vector<std::pair<sourcemeta::core::JSON::String, CodegenIRObjectValue>>
84 std::variant<bool, CodegenIRType> additional;
85 std::vector<CodegenIRObjectPatternProperty> pattern;
90 std::optional<CodegenIRType> items;
95 std::vector<CodegenIRType> items;
96 std::optional<CodegenIRType> additional;
118using CodegenIREntity =
125using CodegenIRResult = std::vector<CodegenIREntity>;
128using CodegenCompiler = std::function<CodegenIREntity(
129 const sourcemeta::core::JSON &,
const sourcemeta::core::SchemaFrame &,
130 const sourcemeta::core::SchemaFrame::Location &,
131 const sourcemeta::core::SchemaResolver &,
const sourcemeta::core::JSON &)>;
134SOURCEMETA_BLAZE_CODEGEN_EXPORT
135auto default_compiler(
const sourcemeta::core::JSON &schema,
136 const sourcemeta::core::SchemaFrame &frame,
137 const sourcemeta::core::SchemaFrame::Location &location,
138 const sourcemeta::core::SchemaResolver &resolver,
139 const sourcemeta::core::JSON &subschema)
143SOURCEMETA_BLAZE_CODEGEN_EXPORT
144auto compile(
const sourcemeta::core::JSON &input,
145 const sourcemeta::core::SchemaWalker &walker,
146 const sourcemeta::core::SchemaResolver &resolver,
147 const CodegenCompiler &compiler,
148 const std::string_view default_dialect =
"",
149 const std::string_view default_id =
"") -> CodegenIRResult;
152SOURCEMETA_BLAZE_CODEGEN_EXPORT
153auto symbol(
const sourcemeta::core::SchemaFrame &frame,
154 const sourcemeta::core::SchemaFrame::Location &location)
155 -> std::vector<std::string>;
158SOURCEMETA_BLAZE_CODEGEN_EXPORT
159auto mangle(
const std::string_view prefix,
160 const sourcemeta::core::Pointer &pointer,
161 const std::vector<std::string> &symbol,
162 std::map<std::string, sourcemeta::core::Pointer> &cache)
163 ->
const std::string &;
167auto generate(std::ostream &output,
const CodegenIRResult &result,
168 const std::string_view prefix =
"Schema") ->
void {
169 T visitor{output, prefix};
170 const char *separator{
""};
171 for (
const auto &entity : result) {
174 std::visit(visitor, entity);