#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 from_json_str(std::string_view json_str) -> cppbase::Result; 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; };