diff options
Diffstat (limited to 'view/sharedcache/core/MetadataSerializable.hpp')
| -rw-r--r-- | view/sharedcache/core/MetadataSerializable.hpp | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/view/sharedcache/core/MetadataSerializable.hpp b/view/sharedcache/core/MetadataSerializable.hpp index e595ef90..85f5ff36 100644 --- a/view/sharedcache/core/MetadataSerializable.hpp +++ b/view/sharedcache/core/MetadataSerializable.hpp @@ -86,9 +86,10 @@ struct DeserializationContext { template <typename Derived, typename LoadResult = Derived> class MetadataSerializable { public: - std::string AsString() const { + template <typename... Args> + std::string AsString(Args&&... args) const { SerializationContext context; - Store(context); + Store(context, std::forward<Args>(args)...); return context.buffer.GetString(); } @@ -106,14 +107,15 @@ public: return Derived::Load(context); } - Ref<Metadata> AsMetadata() const { - return new Metadata(AsString()); + template <typename... Args> + Ref<Metadata> AsMetadata(Args&&... args) const { + return new Metadata(AsString(std::forward<Args>(args)...)); } template <typename... Args> - void Store(SerializationContext& context) const { + void Store(SerializationContext& context, Args&&... args) const { context.writer.StartObject(); - AsDerived().Store(context); + AsDerived().Store(context, std::forward<Args>(args)...); context.writer.EndObject(); } @@ -148,8 +150,8 @@ void Serialize(SerializationContext& context, const std::pair<First, Second>& va context.writer.EndArray(); } -template <typename K, typename V> -void Serialize(SerializationContext& context, const std::map<K, V>& value) +template <typename K, typename V, typename L> +void Serialize(SerializationContext& context, const std::map<K, V, L>& value) { context.writer.StartArray(); for (auto& pair : value) @@ -181,6 +183,15 @@ void Serialize(SerializationContext& context, const std::vector<T>& values) context.writer.EndArray(); } +template <typename T> +void Serialize(SerializationContext& context, const std::optional<T>& value) +{ + if (value.has_value()) + Serialize(context, *value); + else + context.writer.Null(); +} + SHAREDCACHE_FFI_API void Serialize(SerializationContext& context, const char*); SHAREDCACHE_FFI_API void Serialize(SerializationContext& context, bool b); SHAREDCACHE_FFI_API void Deserialize(DeserializationContext& context, std::string_view name, bool& b); @@ -200,6 +211,7 @@ SHAREDCACHE_FFI_API void Serialize(SerializationContext& context, int32_t b); SHAREDCACHE_FFI_API void Deserialize(DeserializationContext& context, std::string_view name, int32_t& b); SHAREDCACHE_FFI_API void Serialize(SerializationContext& context, int64_t b); SHAREDCACHE_FFI_API void Deserialize(DeserializationContext& context, std::string_view name, int64_t& b); +SHAREDCACHE_FFI_API void Serialize(SerializationContext& context, unsigned long b); SHAREDCACHE_FFI_API void Serialize(SerializationContext& context, std::string_view b); SHAREDCACHE_FFI_API void Serialize(SerializationContext& context, const std::pair<uint64_t, std::pair<uint64_t, uint64_t>>& value); SHAREDCACHE_FFI_API void Deserialize(DeserializationContext& context, std::string_view name, std::string& b); |
