54 lines
1.4 KiB
C++
54 lines
1.4 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 from_json_str(std::string_view json_str)
|
|
-> cppbase::Result<IkarusValueSchema, IkarusValueSchemaParseError>;
|
|
static auto to_json(IkarusValueSchema const & value) -> nlohmann::json;
|
|
|
|
auto validate(IkarusValueData const & data) const -> bool;
|
|
auto default_value_data() const -> IkarusValueData;
|
|
auto default_value() const -> IkarusValue;
|
|
|
|
IkarusValueSchemaVariant variant;
|
|
};
|