51 lines
1.2 KiB
C++
51 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include <variant>
|
|
#include <vector>
|
|
|
|
#include <nlohmann/json.hpp>
|
|
|
|
#include <cppbase/pointer.hpp>
|
|
#include <cppbase/result.hpp>
|
|
|
|
#include <ikarus/values/errors.hpp>
|
|
#include <ikarus/values/schema.h>
|
|
|
|
struct IkarusValue;
|
|
struct IkarusValueData;
|
|
struct IkarusValueSchema;
|
|
|
|
struct IkarusValueSchemaPrimitive {
|
|
IkarusValuePrimitiveType type;
|
|
};
|
|
|
|
struct IkarusValueSchemaList {
|
|
cppbase::owning_ptr<IkarusValueSchema> sub_schema;
|
|
};
|
|
|
|
struct IkarusValueSchemaMap {
|
|
cppbase::owning_ptr<IkarusValueSchema> key_schema;
|
|
cppbase::owning_ptr<IkarusValueSchema> value_schema;
|
|
};
|
|
|
|
struct IkarusValueSchemaTuple {
|
|
std::vector<cppbase::owning_ptr<IkarusValueSchema>> sub_schemas;
|
|
};
|
|
|
|
struct IkarusValueSchema {
|
|
using IkarusValueSchemaVariant = std::variant<
|
|
IkarusValueSchemaPrimitive,
|
|
IkarusValueSchemaList,
|
|
IkarusValueSchemaMap,
|
|
IkarusValueSchemaTuple>;
|
|
|
|
static auto from_json(nlohmann::json const & json)
|
|
-> cppbase::Result<IkarusValueSchema, IkarusValueSchemaParseError>;
|
|
static auto to_json(nlohmann::json & json, IkarusValueSchema const & value)
|
|
-> void;
|
|
|
|
auto validate(IkarusValueData const & data) const -> bool;
|
|
|
|
IkarusValueSchemaVariant variant;
|
|
};
|