Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
16 changes: 2 additions & 14 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,22 +108,10 @@ jobs:
- run: cmake --build ./build --config Release --parallel 4
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_noa
--component sourcemeta_core
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_noa_dev
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_jsontoolkit
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_jsontoolkit_dev
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_alterschema
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_alterschema_dev
--component sourcemeta_core_dev
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_jsonbinpack
Expand Down
15 changes: 7 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ option(JSONBINPACK_DOCS "Build the JSON BinPack documentation" OFF)
option(JSONBINPACK_ADDRESS_SANITIZER "Build JSON BinPack with an address sanitizer" OFF)
option(JSONBINPACK_UNDEFINED_SANITIZER "Build JSON BinPack with an undefined behavior sanitizer" OFF)

find_package(Noa REQUIRED)
find_package(Core REQUIRED)

if(JSONBINPACK_INSTALL)
include(GNUInstallDirs)
Expand All @@ -37,8 +37,7 @@ if(JSONBINPACK_INSTALL)
endif()

# Dependencies
find_package(JSONToolkit REQUIRED)
find_package(AlterSchema REQUIRED)
find_package(Core REQUIRED)

# Numeric
if(JSONBINPACK_NUMERIC)
Expand All @@ -56,21 +55,21 @@ if(JSONBINPACK_COMPILER)
endif()

if(JSONBINPACK_ADDRESS_SANITIZER)
noa_sanitizer(TYPE address)
sourcemeta_sanitizer(TYPE address)
elseif(JSONBINPACK_UNDEFINED_SANITIZER)
noa_sanitizer(TYPE undefined)
sourcemeta_sanitizer(TYPE undefined)
endif()

if(JSONBINPACK_DOCS)
noa_target_doxygen(CONFIG "${PROJECT_SOURCE_DIR}/doxygen/Doxyfile.in"
sourcemeta_target_doxygen(CONFIG "${PROJECT_SOURCE_DIR}/doxygen/Doxyfile.in"
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/www")
endif()

if(PROJECT_IS_TOP_LEVEL)
noa_target_clang_format(SOURCES
sourcemeta_target_clang_format(SOURCES
src/*.h src/*.cc
test/*.h test/*.cc)
noa_target_clang_tidy(SOURCES
sourcemeta_target_clang_tidy(SOURCES
src/*.h src/*.cc)
endif()

Expand Down
4 changes: 1 addition & 3 deletions DEPENDENCIES
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
vendorpull https://github.com/sourcemeta/vendorpull 70342aaf458e6cb80baeb5b718901075fc42ede6
noa https://github.com/sourcemeta/noa dee6c859895baf918fe3ecca22e4e7a262c5d500
jsontoolkit https://github.com/sourcemeta/jsontoolkit d3436cfa5546f5f5c01ffa2f2314aabd966a84ed
alterschema https://github.com/sourcemeta/alterschema dfbc1f51d81ec231346c7e73f06c60cbaa7b0db6
core https://github.com/sourcemeta/core 514001ace2da9444cfe2382a4134ed4cd773ce73
bootstrap https://github.com/twbs/bootstrap 1a6fdfae6be09b09eaced8f0e442ca6f7680a61e
12 changes: 2 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,9 @@ compile: .always
$(CMAKE) --build ./build --config $(PRESET) --target clang_format
$(CMAKE) --build ./build --config $(PRESET) --parallel 4
$(CMAKE) --install ./build --prefix ./build/dist --config $(PRESET) --verbose \
--component sourcemeta_noa
--component sourcemeta_core
$(CMAKE) --install ./build --prefix ./build/dist --config $(PRESET) --verbose \
--component sourcemeta_noa_dev
$(CMAKE) --install ./build --prefix ./build/dist --config $(PRESET) --verbose \
--component sourcemeta_jsontoolkit
$(CMAKE) --install ./build --prefix ./build/dist --config $(PRESET) --verbose \
--component sourcemeta_jsontoolkit_dev
$(CMAKE) --install ./build --prefix ./build/dist --config $(PRESET) --verbose \
--component sourcemeta_alterschema
$(CMAKE) --install ./build --prefix ./build/dist --config $(PRESET) --verbose \
--component sourcemeta_alterschema_dev
--component sourcemeta_core_dev
$(CMAKE) --install ./build --prefix ./build/dist --config $(PRESET) --verbose \
--component sourcemeta_jsonbinpack
$(CMAKE) --install ./build --prefix ./build/dist --config $(PRESET) --verbose \
Expand Down
10 changes: 0 additions & 10 deletions cmake/FindAlterSchema.cmake

This file was deleted.

15 changes: 15 additions & 0 deletions cmake/FindCore.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
if(NOT Core_FOUND)
if(JSONBINPACK_INSTALL)
set(SOURCEMETA_CORE_INSTALL ON CACHE BOOL "enable installation")
else()
set(SOURCEMETA_CORE_INSTALL OFF CACHE BOOL "disable installation")
endif()

set(SOURCEMETA_CORE_JSONL OFF CACHE BOOL "disable JSONL support")
set(SOURCEMETA_CORE_YAML OFF CACHE BOOL "disable YAML support")
set(SOURCEMETA_CORE_CONTRIB_GOOGLETEST ${JSONBINPACK_TESTS} CACHE BOOL "GoogleTest")
set(SOURCEMETA_CORE_CONTRIB_GOOGLEBENCHMARK ${JSONBINPACK_BENCHMARK} CACHE BOOL "GoogleBenchmark")
add_subdirectory("${PROJECT_SOURCE_DIR}/vendor/core")
include(Sourcemeta)
set(Core_FOUND ON)
endif()
12 changes: 0 additions & 12 deletions cmake/FindJSONToolkit.cmake

This file was deleted.

13 changes: 0 additions & 13 deletions cmake/FindNoa.cmake

This file was deleted.

3 changes: 1 addition & 2 deletions config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ if(NOT JSONBINPACK_COMPONENTS)
endif()

include(CMakeFindDependencyMacro)
find_dependency(JSONToolkit COMPONENTS uri json jsonpointer jsonschema)
find_dependency(AlterSchema COMPONENTS engine linter)
find_dependency(Core COMPONENTS uri json jsonpointer jsonschema alterschema)

foreach(component ${JSONBINPACK_COMPONENTS})
if(component STREQUAL "numeric")
Expand Down
2 changes: 1 addition & 1 deletion doxygen/Doxyfile.in
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ PROJECT_LOGO = @PROJECT_SOURCE_DIR@/doxygen/logo.png
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.

OUTPUT_DIRECTORY = @NOA_TARGET_DOXYGEN_OUTPUT@
OUTPUT_DIRECTORY = @SOURCEMETA_TARGET_DOXYGEN_OUTPUT@

# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and
Expand Down
14 changes: 7 additions & 7 deletions src/compiler/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
noa_library(NAMESPACE sourcemeta PROJECT jsonbinpack NAME compiler
sourcemeta_library(NAMESPACE sourcemeta PROJECT jsonbinpack NAME compiler
FOLDER "JSON BinPack/Compiler"
SOURCES
encoding.h compiler.cc
Expand All @@ -19,16 +19,16 @@ noa_library(NAMESPACE sourcemeta PROJECT jsonbinpack NAME compiler
mapper/number_arbitrary.h)

if(JSONBINPACK_INSTALL)
noa_library_install(NAMESPACE sourcemeta PROJECT jsonbinpack NAME compiler)
sourcemeta_library_install(NAMESPACE sourcemeta PROJECT jsonbinpack NAME compiler)
endif()

target_link_libraries(sourcemeta_jsonbinpack_compiler PRIVATE
sourcemeta::jsonbinpack::numeric)
target_link_libraries(sourcemeta_jsonbinpack_compiler PUBLIC
sourcemeta::jsontoolkit::json)
target_link_libraries(sourcemeta_jsonbinpack_compiler PUBLIC
sourcemeta::jsontoolkit::jsonschema)
sourcemeta::core::json)
target_link_libraries(sourcemeta_jsonbinpack_compiler PRIVATE
sourcemeta::alterschema::engine)
sourcemeta::core::jsonpointer)
target_link_libraries(sourcemeta_jsonbinpack_compiler PUBLIC
sourcemeta::core::jsonschema)
target_link_libraries(sourcemeta_jsonbinpack_compiler PRIVATE
sourcemeta::alterschema::linter)
sourcemeta::core::alterschema)
56 changes: 30 additions & 26 deletions src/compiler/compiler.cc
Original file line number Diff line number Diff line change
@@ -1,34 +1,38 @@
#include <sourcemeta/jsonbinpack/compiler.h>
#include <sourcemeta/jsonbinpack/numeric.h>

#include <sourcemeta/alterschema/engine.h>
#include <sourcemeta/alterschema/linter.h>
#include <sourcemeta/core/alterschema.h>
#include <sourcemeta/core/jsonpointer.h>

#include "encoding.h"

namespace sourcemeta::jsonbinpack {

auto canonicalize(sourcemeta::jsontoolkit::JSON &schema,
const sourcemeta::jsontoolkit::SchemaWalker &walker,
const sourcemeta::jsontoolkit::SchemaResolver &resolver,
auto canonicalize(sourcemeta::core::JSON &schema,
const sourcemeta::core::SchemaWalker &walker,
const sourcemeta::core::SchemaResolver &resolver,
const std::optional<std::string> &default_dialect) -> void {
namespace alterschema = sourcemeta::alterschema;
alterschema::Bundle canonicalizer;
alterschema::add(canonicalizer, alterschema::LinterCategory::AntiPattern);
alterschema::add(canonicalizer, alterschema::LinterCategory::Simplify);
alterschema::add(canonicalizer, alterschema::LinterCategory::Desugar);
alterschema::add(canonicalizer, alterschema::LinterCategory::Implicit);
alterschema::add(canonicalizer, alterschema::LinterCategory::Superfluous);
sourcemeta::core::SchemaTransformer canonicalizer;
sourcemeta::core::add(canonicalizer,
sourcemeta::core::AlterSchemaCategory::AntiPattern);
sourcemeta::core::add(canonicalizer,
sourcemeta::core::AlterSchemaCategory::Simplify);
sourcemeta::core::add(canonicalizer,
sourcemeta::core::AlterSchemaCategory::Desugar);
sourcemeta::core::add(canonicalizer,
sourcemeta::core::AlterSchemaCategory::Implicit);
sourcemeta::core::add(canonicalizer,
sourcemeta::core::AlterSchemaCategory::Superfluous);
canonicalizer.apply(schema, walker, make_resolver(resolver),
sourcemeta::jsontoolkit::empty_pointer, default_dialect);
sourcemeta::core::empty_pointer, default_dialect);
}

auto make_encoding(sourcemeta::alterschema::Transformer &document,
auto make_encoding(sourcemeta::core::PointerProxy &document,
const std::string &encoding,
const sourcemeta::jsontoolkit::JSON &options) -> void {
document.replace(sourcemeta::jsontoolkit::JSON::make_object());
document.assign("$schema", sourcemeta::jsontoolkit::JSON{ENCODING_V1});
document.assign("binpackEncoding", sourcemeta::jsontoolkit::JSON{encoding});
const sourcemeta::core::JSON &options) -> void {
document.replace(sourcemeta::core::JSON::make_object());
document.assign("$schema", sourcemeta::core::JSON{ENCODING_V1});
document.assign("binpackEncoding", sourcemeta::core::JSON{encoding});
document.assign("binpackOptions", options);
}

Expand All @@ -48,13 +52,13 @@ auto make_encoding(sourcemeta::alterschema::Transformer &document,
#include "mapper/integer_upper_bound_multiplier.h"
#include "mapper/number_arbitrary.h"

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

sourcemeta::alterschema::Bundle mapper;
sourcemeta::core::SchemaTransformer mapper;

// Enums
mapper.add<Enum8Bit>();
Expand All @@ -78,14 +82,14 @@ auto compile(sourcemeta::jsontoolkit::JSON &schema,
mapper.add<NumberArbitrary>();

mapper.apply(schema, walker, make_resolver(resolver),
sourcemeta::jsontoolkit::empty_pointer, default_dialect);
sourcemeta::core::empty_pointer, default_dialect);

// The "any" encoding is always the last resort
const auto dialect{sourcemeta::jsontoolkit::dialect(schema)};
const auto dialect{sourcemeta::core::dialect(schema)};
if (!dialect.has_value() || dialect.value() != ENCODING_V1) {
sourcemeta::alterschema::Transformer transformer{schema};
sourcemeta::core::PointerProxy transformer{schema};
make_encoding(transformer, "ANY_PACKED_TYPE_TAG_BYTE_PREFIX",
sourcemeta::jsontoolkit::JSON::make_object());
sourcemeta::core::JSON::make_object());
}
}

Expand Down
12 changes: 6 additions & 6 deletions src/compiler/encoding.h
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
#ifndef SOURCEMETA_JSONBINPACK_COMPILER_ENCODING_H_
#define SOURCEMETA_JSONBINPACK_COMPILER_ENCODING_H_

#include <sourcemeta/jsontoolkit/json.h>
#include <sourcemeta/jsontoolkit/jsonschema.h>
#include <sourcemeta/core/json.h>
#include <sourcemeta/core/jsonschema.h>

namespace sourcemeta::jsonbinpack {

constexpr auto ENCODING_V1{"tag:sourcemeta.com,2024:jsonbinpack/encoding/v1"};

inline auto
make_resolver(const sourcemeta::jsontoolkit::SchemaResolver &fallback) -> auto {
inline auto make_resolver(const sourcemeta::core::SchemaResolver &fallback)
-> auto {
return [&fallback](std::string_view identifier)
-> std::optional<sourcemeta::jsontoolkit::JSON> {
-> std::optional<sourcemeta::core::JSON> {
if (identifier == ENCODING_V1) {
return sourcemeta::jsontoolkit::parse(R"JSON({
return sourcemeta::core::parse(R"JSON({
"$id": "tag:sourcemeta.com,2024:jsonbinpack/encoding/v1",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$vocabulary": {
Expand Down
Loading