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;
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
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