#pragma once #include #include #include #include #include #include #include #include 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> values; }; struct IkarusValueDataMap { std::vector, cppbase::owning_ptr>> values; }; struct IkarusValueDataTuple { std::vector> values; }; struct IkarusValueData { using IkarusValueDataVariant = std::variant< IkarusValueDataPrimitive, IkarusValueDataList, IkarusValueDataMap, IkarusValueDataTuple>; static auto from_json(nlohmann::json const & json) -> cppbase::Result; static auto to_json(nlohmann::json & json, IkarusValueData const & value) -> void; IkarusValueDataVariant variant; }; auto get_primitive_type(IkarusValueDataPrimitive const & primitive) -> IkarusValuePrimitiveType;