Skip to content

Commit

Permalink
Reduce API surface of compiler module (#745)
Browse files Browse the repository at this point in the history
Signed-off-by: Juan Cruz Viotti <[email protected]>
  • Loading branch information
jviotti authored Feb 12, 2024
1 parent c7146df commit 7b71d00
Show file tree
Hide file tree
Showing 36 changed files with 768 additions and 1,210 deletions.
8 changes: 4 additions & 4 deletions src/cli/command_canonicalize.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@

static auto canonicalize_from_json(sourcemeta::jsontoolkit::JSON &schema)
-> int {
sourcemeta::jsonbinpack::Canonicalizer canonicalizer;
canonicalizer.apply(schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);
sourcemeta::jsonbinpack::canonicalize(
schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);
sourcemeta::jsontoolkit::prettify(schema, std::cout);
std::cout << std::endl;
return EXIT_SUCCESS;
Expand Down
14 changes: 4 additions & 10 deletions src/cli/command_compile.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,10 @@
#include <iostream> // std::cin, std::cout, std::endl

static auto compile_from_json(sourcemeta::jsontoolkit::JSON &schema) -> int {
sourcemeta::jsonbinpack::Canonicalizer canonicalizer;
sourcemeta::jsonbinpack::Mapper mapper;

canonicalizer.apply(schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);
mapper.apply(schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);

sourcemeta::jsonbinpack::compile(
schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);
sourcemeta::jsontoolkit::prettify(schema, std::cout);
std::cout << std::endl;
return EXIT_SUCCESS;
Expand Down
14 changes: 4 additions & 10 deletions src/cli/command_decode.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,10 @@ template <typename CharT, typename Traits>
static auto decode_from_stream(sourcemeta::jsontoolkit::JSON &schema,
std::basic_istream<CharT, Traits> &stream)
-> int {
sourcemeta::jsonbinpack::Canonicalizer canonicalizer;
sourcemeta::jsonbinpack::Mapper mapper;

canonicalizer.apply(schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);
mapper.apply(schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);

sourcemeta::jsonbinpack::compile(
schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);
const sourcemeta::jsonbinpack::Encoding encoding{
sourcemeta::jsonbinpack::parse(schema)};
sourcemeta::jsonbinpack::Decoder decoder{stream};
Expand Down
14 changes: 4 additions & 10 deletions src/cli/command_encode.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,10 @@
static auto encode_from_json(sourcemeta::jsontoolkit::JSON &schema,
const sourcemeta::jsontoolkit::JSON &instance)
-> int {
sourcemeta::jsonbinpack::Canonicalizer canonicalizer;
sourcemeta::jsonbinpack::Mapper mapper;

canonicalizer.apply(schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);
mapper.apply(schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);

sourcemeta::jsonbinpack::compile(
schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);
const sourcemeta::jsonbinpack::Encoding encoding{
sourcemeta::jsonbinpack::parse(schema)};
sourcemeta::jsonbinpack::Encoder encoder{std::cout};
Expand Down
9 changes: 5 additions & 4 deletions src/compiler/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
noa_library(NAMESPACE sourcemeta PROJECT jsonbinpack NAME compiler
FOLDER "JSON BinPack/Compiler"
PRIVATE_HEADERS canonicalizer.h mapper_encoding.h mapper_states.h
SOURCES
canonicalizer.cc canonicalizer_utils.h
mapper.cc mapper_encoding.cc mapper_states.cc
schemas.h
canonicalizer.h canonicalizer.cc canonicalizer_utils.h
mapper.h mapper.cc
mapper_encoding.h mapper_encoding.cc
mapper_states.h mapper_states.cc
compiler.cc schemas.h

canonicalizer_rules/boolean_as_enum.h
canonicalizer_rules/boolean_schema.h
Expand Down
3 changes: 1 addition & 2 deletions src/compiler/canonicalizer.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include <sourcemeta/jsonbinpack/compiler_canonicalizer.h>

#include "canonicalizer.h"
#include "schemas.h"

// To be used by the rules below
Expand Down
File renamed without changes.
32 changes: 32 additions & 0 deletions src/compiler/compiler.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#include <sourcemeta/jsonbinpack/compiler.h>

#include "canonicalizer.h"
#include "mapper.h"

namespace sourcemeta::jsonbinpack {

auto compile(sourcemeta::jsontoolkit::JSON &schema,
const sourcemeta::jsontoolkit::SchemaWalker &walker,
const sourcemeta::jsontoolkit::SchemaResolver &resolver,
const std::optional<std::string> &default_dialect) -> void {
canonicalize(schema, walker, resolver, default_dialect);
map(schema, walker, resolver, default_dialect);
}

auto canonicalize(sourcemeta::jsontoolkit::JSON &schema,
const sourcemeta::jsontoolkit::SchemaWalker &walker,
const sourcemeta::jsontoolkit::SchemaResolver &resolver,
const std::optional<std::string> &default_dialect) -> void {
static sourcemeta::jsonbinpack::Canonicalizer canonicalizer;
canonicalizer.apply(schema, walker, resolver, default_dialect);
}

auto map(sourcemeta::jsontoolkit::JSON &schema,
const sourcemeta::jsontoolkit::SchemaWalker &walker,
const sourcemeta::jsontoolkit::SchemaResolver &resolver,
const std::optional<std::string> &default_dialect) -> void {
static sourcemeta::jsonbinpack::Mapper mapper;
mapper.apply(schema, walker, resolver, default_dialect);
}

} // namespace sourcemeta::jsonbinpack
30 changes: 28 additions & 2 deletions src/compiler/include/sourcemeta/jsonbinpack/compiler.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,33 @@
#ifndef SOURCEMETA_JSONBINPACK_COMPILER_H_
#define SOURCEMETA_JSONBINPACK_COMPILER_H_

#include <sourcemeta/jsonbinpack/compiler_canonicalizer.h>
#include <sourcemeta/jsonbinpack/compiler_mapper.h>
#include <sourcemeta/jsontoolkit/json.h>
#include <sourcemeta/jsontoolkit/jsonschema.h>

#include <optional> // std::optional
#include <string> // std::string

namespace sourcemeta::jsonbinpack {

auto compile(sourcemeta::jsontoolkit::JSON &schema,
const sourcemeta::jsontoolkit::SchemaWalker &walker,
const sourcemeta::jsontoolkit::SchemaResolver &resolver,
const std::optional<std::string> &default_dialect = std::nullopt)
-> void;

auto canonicalize(
sourcemeta::jsontoolkit::JSON &schema,
const sourcemeta::jsontoolkit::SchemaWalker &walker,
const sourcemeta::jsontoolkit::SchemaResolver &resolver,
const std::optional<std::string> &default_dialect = std::nullopt) -> void;

// TODO: Rename to plan()?
auto map(sourcemeta::jsontoolkit::JSON &schema,
const sourcemeta::jsontoolkit::SchemaWalker &walker,
const sourcemeta::jsontoolkit::SchemaResolver &resolver,
const std::optional<std::string> &default_dialect = std::nullopt)
-> void;

} // namespace sourcemeta::jsonbinpack

#endif
10 changes: 3 additions & 7 deletions src/compiler/mapper.cc
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
#include <sourcemeta/jsonbinpack/compiler_mapper.h>
#include <sourcemeta/jsonbinpack/compiler_mapper_encoding.h>

#include "mapper.h"
#include "mapper_encoding.h"
#include "mapper_states.h"
#include "schemas.h"

#include <cassert> // assert
#include <cstdint> // std::int64_t
#include <limits> // std::numeric_limits
#include <stdexcept> // std::domain_error

// To be used by the rules below
#include <sourcemeta/jsonbinpack/compiler_mapper_encoding.h>
#include <sourcemeta/jsonbinpack/compiler_mapper_states.h>

constexpr auto is_byte(const std::int64_t value) noexcept -> bool {
return value <= std::numeric_limits<std::uint8_t>::max();
}
Expand Down
File renamed without changes.
17 changes: 1 addition & 16 deletions src/compiler/mapper_encoding.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include <sourcemeta/jsonbinpack/compiler_mapper_encoding.h>

#include "mapper_encoding.h"
#include "schemas.h"

#include <optional> // std::optional
Expand All @@ -24,17 +23,3 @@ auto sourcemeta::jsonbinpack::mapper::make_encoding(
document.assign(keywords::name, sourcemeta::jsontoolkit::JSON{encoding});
document.assign(keywords::options, options);
}

auto sourcemeta::jsonbinpack::mapper::resolver(const std::string &identifier)
-> std::future<std::optional<sourcemeta::jsontoolkit::JSON>> {
std::promise<std::optional<sourcemeta::jsontoolkit::JSON>> promise;

if (identifier == sourcemeta::jsonbinpack::schemas::encoding::v1::id) {
promise.set_value(sourcemeta::jsontoolkit::parse(
sourcemeta::jsonbinpack::schemas::encoding::v1::json));
} else {
promise.set_value(std::nullopt);
}

return promise.get_future();
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ auto make_encoding(sourcemeta::jsontoolkit::SchemaTransformer &document,
const std::string &encoding,
const sourcemeta::jsontoolkit::JSON &options) -> void;

auto resolver(const std::string &identifier)
-> std::future<std::optional<sourcemeta::jsontoolkit::JSON>>;

} // namespace sourcemeta::jsonbinpack::mapper

#endif
2 changes: 1 addition & 1 deletion src/compiler/mapper_states.cc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include <sourcemeta/jsonbinpack/compiler_mapper_states.h>
#include "mapper_states.h"

#include <cassert> // assert
#include <cmath> // std::abs, std::ceil, std::floor
Expand Down
File renamed without changes.
Loading

0 comments on commit 7b71d00

Please sign in to comment.