// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved. #pragma once #include "Engine/Serialization/JsonFwd.h" #include "Engine/Core/Compiler.h" #include "Engine/Core/Config.h" class JsonWriter; class ISerializeModifier; /// /// Interface for objects that can be serialized/deserialized to/from JSON format. /// API_INTERFACE() class FLAXENGINE_API ISerializable { DECLARE_SCRIPTING_TYPE_MINIMAL(ISerializable); public: typedef rapidjson_flax::Document SerializeDocument; /// /// Serialization output stream /// typedef rapidjson_flax::Value DeserializeStream; /// /// Serialization input stream /// typedef JsonWriter SerializeStream; public: /// /// Finalizes an instance of the class. /// virtual ~ISerializable() = default; /// /// Serializes object to the output stream compared to the values of the other object instance (eg. default class object). If other object is null then serialize all properties. /// /// The output stream. /// The instance of the object to compare with and serialize only the modified properties. If null, then serialize all properties. virtual void Serialize(SerializeStream& stream, const void* otherObj) = 0; /// /// Deserializes object from the input stream. /// /// The input stream. /// The deserialization modifier object. Always valid. virtual void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) = 0; /// /// Deserializes object from the input stream child member. Won't deserialize it if member is missing. /// /// The input stream. /// The input stream member to lookup. /// The deserialization modifier object. Always valid. void DeserializeIfExists(DeserializeStream& stream, const char* memberName, ISerializeModifier* modifier); };