36 Serializable(
const Serializable&) =
default;
37 Serializable(Serializable&&) =
default;
38 Serializable& operator=(
const Serializable&) =
default;
39 Serializable& operator=(Serializable&&) =
default;
40 Serializable() =
default;
41 virtual ~Serializable() =
default;
48 class BytesWriterStrategy
57 virtual void WriteBytes(
Writer& writer,
const char* name,
const std::vector<uint8_t>& value) = 0;
59 BytesWriterStrategy(
const BytesWriterStrategy&) =
default;
60 BytesWriterStrategy(BytesWriterStrategy&&) =
default;
61 BytesWriterStrategy& operator=(
const BytesWriterStrategy&) =
default;
62 BytesWriterStrategy& operator=(BytesWriterStrategy&&) =
default;
63 BytesWriterStrategy() =
default;
64 virtual ~BytesWriterStrategy() =
default;
69 concept IsIterable =
requires(T a) {
74 concept IsNotIterable = !IsIterable<T>;
184 virtual void Write(
const char* name,
const char* value) = 0;
190 virtual void Write(
const char* name,
int value) = 0;
196 virtual void Write(
const char* name,
unsigned int value) = 0;
202 virtual void Write(
const char* name,
double value) = 0;
208 virtual void Write(
const char* name, int64_t value) = 0;
214 virtual void Write(
const char* name, uint64_t value) = 0;
222 virtual void Write(
const char* name,
const std::shared_ptr<Image>& value) = 0;
227 virtual void WriteNull(
const char* name) = 0;
234 void WriteArray(
const char* name,
const std::vector<uint8_t>& value)
236 bytesStrategy->WriteBytes(*
this, name, value);
260 void WriteArray(
const char* name,
const T& array);
267 void Write(
const char* name,
const std::shared_ptr<const Serializable>& s)
285 void Write(
const char* name,
const std::optional<T>& s)
289 Write(name, s.value());
302 : bytesStrategy(&defaultBytesStrategy)
305 virtual ~Writer() =
default;
308 virtual void StartArray(
const char* name) = 0;
309 virtual void EndArray() = 0;
314 requires IsIterable<T>
315 void WriteInWriter(T& value)
317 WriteArray(
"", value);
320 requires IsNotIterable<T>
321 void WriteInWriter(T& value)
327 class DefaultBytesStrategy :
public BytesWriterStrategy
330 void WriteBytes(Writer& writer,
const char* name,
const std::vector<uint8_t>& value)
final
332 writer.WriteArray<>(name, value);
335 DefaultBytesStrategy(
const DefaultBytesStrategy&) =
default;
336 DefaultBytesStrategy(DefaultBytesStrategy&&) =
default;
337 DefaultBytesStrategy& operator=(
const DefaultBytesStrategy&) =
default;
338 DefaultBytesStrategy& operator=(DefaultBytesStrategy&&) =
default;
339 DefaultBytesStrategy() =
default;
340 virtual ~DefaultBytesStrategy() =
default;
343 DefaultBytesStrategy defaultBytesStrategy;
344 BytesWriterStrategy* bytesStrategy;
352 for (
auto& e : array)
It is used by Writer class to modify bytes serialization algorithm.
Definition Writer.h:48
virtual void WriteBytes(Writer &writer, const char *name, const std::vector< uint8_t > &value)=0
It writes bytes in given writer.
Image representation.
Definition Image.h:34
Interface that MUST be implemented by all classes those want to be serialized.
Definition Writer.h:27
virtual void WriteTo(Writer &writer) const =0
Write itself into writer.
Provides interface for serialization of all classes.
Definition Writer.h:164
virtual void Write(const char *name, const char *value)=0
Serialize string.
virtual void Write(const char *name, int64_t value)=0
Serialize int64_t integer.
void SetBytesStrategy(BytesWriterStrategy &s)
Set bytes serialization strategy .
Definition Writer.h:245
virtual void Write(const char *name, int value)=0
Serialize int.
void Write(const char *name, const std::shared_ptr< const Serializable > &s)
Serialize const serializable given as shared_ptr.
Definition Writer.h:266
virtual void Write(const char *name, const Serializable &s)=0
Serialize serializable.
virtual void Write(const char *name, const std::shared_ptr< Image > &value)=0
Serialize Image.
void WriteArray(const char *name, const std::vector< uint8_t > &value)
Serialize bytes from vector.
Definition Writer.h:233
virtual void WriteNull(const char *name)=0
Serialize null object.
virtual void WriteRoot(Serializable &s)=0
Serialize serializable as root object.
virtual void Write(const char *name, uint64_t value)=0
Serialize uint64_t integer.
void Write(const char *name, const std::optional< T > &s)
Serialize serializable given as shared_ptr.
Definition Writer.h:284
virtual void Write(const char *name, double value)=0
Serialize double.
virtual void Write(const char *name, unsigned int value)=0
Serialize unsigned int.