26 std::vector<FieldDescriptor> (*
const getChildren)();
34 std::vector<FieldDescriptor> (*fieldChildren)() =
nullptr)
65 using EnableIfSignedIntegral =
66 std::enable_if_t<std::is_integral<T>::value && std::is_signed<T>::value && !std::is_same<T, bool>::value,
70 using EnableIfUnsignedIntegral =
71 std::enable_if_t<std::is_integral<T>::value && std::is_unsigned<T>::value && !std::is_same<T, bool>::value,
99 virtual void writeField(
const FieldDescriptor& field,
const std::string& value) = 0;
100 virtual void writeField(
const FieldDescriptor& field, int64_t value) = 0;
101 virtual void writeField(
const FieldDescriptor& field, uint64_t value) = 0;
102 virtual void writeField(
const FieldDescriptor& field,
double value) = 0;
106 virtual void writeField(
const FieldDescriptor& field,
const char* value)
108 writeField(field, std::string(value));
111 template <
typename T,
internal::EnableIfSignedIntegral<T> = 0>
114 writeField(field,
static_cast<int64_t
>(value));
117 template <
typename T,
internal::EnableIfUn
signedIntegral<T> = 0>
118 void writeField(
const FieldDescriptor& field, T value)
120 writeField(field,
static_cast<uint64_t
>(value));
123 virtual void writeHexField(
const FieldDescriptor& field, uint64_t value) = 0;
125 template <typename T, std::enable_if_t<std::is_integral<T>::value && std::is_unsigned<T>::value,
int> = 0>
126 void writeHexField(
const FieldDescriptor& field, T value)
128 writeHexField(field,
static_cast<uint64_t
>(value));
131 virtual void startObject(
const FieldDescriptor& field) = 0;
132 virtual void endObject() = 0;
133 virtual void startArray(
const FieldDescriptor& field) = 0;
134 virtual void endArray() = 0;
136 void enforceOneRoot();
138 bool m_ShouldEnforceOneRoot =
true;
141 bool m_RootWritten =
false;
149 using ISerializer::writeField;
185 template <
typename T,
internal::EnableIfSignedIntegral<T> = 0>
188 writeField(field,
static_cast<int64_t
>(value));
191 template <
typename T,
internal::EnableIfUn
signedIntegral<T> = 0>
194 writeField(field,
static_cast<uint64_t
>(value));
198 void startObject(
const FieldDescriptor& field)
override;
199 void endObject()
override;
200 void startArray(
const FieldDescriptor& field)
override;
201 void endArray()
override;
203 explicit ScopeBase(ISerializer* serializer) : m_Serializer(serializer)
205 m_ShouldEnforceOneRoot =
false;
208 ISerializer* m_Serializer;
216 using ScopeBase::writeField;
232 using ScopeBase::writeField;
248 using ISerializer::writeField;
249 using ISerializer::writeHexField;
256 void writeField(
const FieldDescriptor& field,
const std::string& value)
override;
258 void writeField(
const FieldDescriptor& field, uint64_t value)
override;
262 void writeHexField(
const FieldDescriptor& field, uint64_t value)
override;
264 void endObject()
override;
266 void endArray()
override;
275 void writeSeparatorIfNeeded();
276 void writeKey(
const std::string& name);
279 std::vector<Context> m_ContextStack;
280 std::vector<bool> m_FirstAtLevel;
288 using ISerializer::writeField;
289 using ISerializer::writeHexField;
296 void writeField(
const FieldDescriptor& field,
const std::string& value)
override;
298 void writeField(
const FieldDescriptor& field, uint64_t value)
override;
302 void writeHexField(
const FieldDescriptor& field, uint64_t value)
override;
305 void endObject()
override;
307 void endArray()
override;
318 void writeNewlineIfNeeded();
324 void writeContainerHeader(
const std::string& name);
329 void writeFieldPrefix(
const std::string& name);
331 bool isArrayContext()
const;
334 std::vector<Context> m_ContextStack;
335 bool m_WriteNewLine =
false;
336 bool m_WriteIdent =
true;
344 using ISerializer::writeField;
345 using ISerializer::writeHexField;
352 void writeField(
const FieldDescriptor& field,
const std::string& value)
override;
354 void writeField(
const FieldDescriptor& field, uint64_t value)
override;
358 void writeHexField(
const FieldDescriptor& field, uint64_t value)
override;
361 void endObject()
override;
363 void endArray()
override;
373 void writeOpenTag(
const std::string& name);
374 void writeCloseTag(
const std::string& name);
375 void writeValueElement(
const std::string& name,
const std::string& value,
bool isNull =
false);
379 static std::string escapeXML(
const std::string& s);
382 static bool isValidXMLName(
const std::string& name);
388 static std::string resolveElementName(
const std::string& name,
const char* fallback);
392 std::vector<Context> m_ContextStack;
395 mutable std::vector<std::string> m_IndentCache;
Definition: Serializers.h:214
ArrayScope(ISerializer *serializer, const FieldDescriptor &field)
~ArrayScope() override
Close the array.
Definition: Serializers.h:78
virtual ~ISerializer()=default
Destroy the serializer.
ObjectScope writeObject(const FieldDescriptor &field)
ArrayScope writeArray(const FieldDescriptor &field)
Definition: Serializers.h:246
JsonSerializer(std::ostream &out)
Definition: Serializers.h:230
~ObjectScope() override
Close the object.
ObjectScope(ISerializer *serializer, const FieldDescriptor &field)
Definition: Serializers.h:147
void writeField(const FieldDescriptor &field, uint64_t value) override
void writeNullField(const FieldDescriptor &field) override
void writeHexField(const FieldDescriptor &field, uint64_t value) override
void writeField(const FieldDescriptor &field, const std::string &value) override
void writeField(const FieldDescriptor &field, double value) override
void writeField(const FieldDescriptor &field, bool value) override
void writeField(const FieldDescriptor &field, int64_t value) override
Definition: Serializers.h:342
XmlSerializer(std::ostream &out)
Definition: Serializers.h:286
YamlSerializer(std::ostream &out)
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
Definition: Serializers.h:18
std::vector< FieldDescriptor >(*const getChildren)()
Function returning the descriptors of the field's children, or nullptr if the field has no children.
Definition: Serializers.h:26
const uint16_t id
Stable numeric identifier of the field.
Definition: Serializers.h:20
const std::string name
Name of the field.
Definition: Serializers.h:23
bool hasChildren() const
Definition: Serializers.h:40
FieldDescriptor(uint16_t fieldId, std::string fieldName, std::vector< FieldDescriptor >(*fieldChildren)()=nullptr)
Definition: Serializers.h:33
Definition: Serializers.h:49
ObjectFieldDescriptor(uint16_t fieldId, std::string fieldName)
Definition: Serializers.h:53