diff --git a/lib/binary/reflector.h b/lib/binary/reflector.h index 89c47d6..1fe33c7 100644 --- a/lib/binary/reflector.h +++ b/lib/binary/reflector.h @@ -35,6 +35,10 @@ template struct AdaptedBinarySerializable : public Traits::Bool struct BinarySerializable; +template struct BinarySerializableMeta { + static constexpr std::uint64_t version = 0; +}; + /*! * \brief The BinaryReflector namespace contains BinaryReader and BinaryWriter for automatic binary (de)serialization. */ diff --git a/lib/binary/serializable.h b/lib/binary/serializable.h index 741c3e2..01a1825 100644 --- a/lib/binary/serializable.h +++ b/lib/binary/serializable.h @@ -23,6 +23,7 @@ template struct BinarySerializable { static Type fromBinary(std::istream &inputStream); static constexpr const char *qualifiedName = "ReflectiveRapidJSON::BinarySerializable"; + static constexpr auto version = BinarySerializableMeta::version; }; template inline void BinarySerializable::toBinary(std::ostream &outputStream) const @@ -53,6 +54,14 @@ template Type BinarySerializable::fromBinary(std::istream template <> struct ReflectiveRapidJSON::AdaptedBinarySerializable : Traits::Bool { \ } +/*! + * \def The REFLECTIVE_RAPIDJSON_DECLARE_BINARY_SERIALIZABLE_VERSION macro allows to declare the version of a BinarySerializable. + */ +#define REFLECTIVE_RAPIDJSON_DECLARE_BINARY_SERIALIZABLE_VERSION(T, v) \ + template <> struct ReflectiveRapidJSON::BinarySerializableMeta { \ + static constexpr std::uint64_t version = v; \ + } + } // namespace ReflectiveRapidJSON #endif // REFLECTIVE_RAPIDJSON_BINARY_SERIALIZABLE_H