64 lines
1.4 KiB
C++
64 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <variant>
|
|
#include <vector>
|
|
|
|
#include <nlohmann/json.hpp>
|
|
|
|
#include <cppbase/pointer.hpp>
|
|
#include <cppbase/result.hpp>
|
|
|
|
#include <ikarus/values/data.h>
|
|
#include <ikarus/values/errors.hpp>
|
|
#include <ikarus/values/schema.h>
|
|
|
|
struct IkarusValueData;
|
|
|
|
struct IkarusValueDataPrimitiveToggle {
|
|
bool value;
|
|
};
|
|
|
|
struct IkarusValueDataPrimitiveNumber {
|
|
double value;
|
|
};
|
|
|
|
struct IkarusValueDataPrimitiveString {
|
|
std::string value;
|
|
};
|
|
|
|
using IkarusValueDataPrimitive = std::variant<
|
|
IkarusValueDataPrimitiveToggle,
|
|
IkarusValueDataPrimitiveNumber,
|
|
IkarusValueDataPrimitiveString>;
|
|
|
|
struct IkarusValueDataList {
|
|
std::vector<cppbase::owning_ptr<IkarusValueData>> values;
|
|
};
|
|
|
|
struct IkarusValueDataMap {
|
|
std::vector<std::pair<
|
|
cppbase::owning_ptr<IkarusValueData>,
|
|
cppbase::owning_ptr<IkarusValueData>>>
|
|
values;
|
|
};
|
|
|
|
struct IkarusValueDataTuple {
|
|
std::vector<cppbase::owning_ptr<IkarusValueData>> values;
|
|
};
|
|
|
|
struct IkarusValueData {
|
|
using IkarusValueDataVariant = std::variant<
|
|
IkarusValueDataPrimitive,
|
|
IkarusValueDataList,
|
|
IkarusValueDataMap,
|
|
IkarusValueDataTuple>;
|
|
|
|
static auto from_json(nlohmann::json const & json)
|
|
-> cppbase::Result<IkarusValueData, IkarusValueDataParseError>;
|
|
static auto to_json(IkarusValueData const & value) -> nlohmann::json;
|
|
|
|
IkarusValueDataVariant variant;
|
|
};
|
|
|
|
auto get_primitive_type(IkarusValueDataPrimitive const & primitive)
|
|
-> IkarusValuePrimitiveType;
|