#pragma once #include #include #include #include #include #include #include #include struct IkarusValue; struct IkarusValueData; struct IkarusValueSchema; struct IkarusValueSchemaPrimitive { IkarusValuePrimitiveType type; }; struct IkarusValueSchemaList { cppbase::owning_ptr sub_schema; }; struct IkarusValueSchemaMap { cppbase::owning_ptr key_schema; cppbase::owning_ptr value_schema; }; struct IkarusValueSchemaTuple { std::vector> sub_schemas; }; struct IkarusValueSchema { using IkarusValueSchemaVariant = std::variant< IkarusValueSchemaPrimitive, IkarusValueSchemaList, IkarusValueSchemaMap, IkarusValueSchemaTuple>; static auto from_json(nlohmann::json const & json) -> cppbase::Result; static auto to_json(nlohmann::json & json, IkarusValueSchema const & value) -> void; auto validate(IkarusValueData const & data) const -> bool; IkarusValueSchemaVariant variant; };