lintel 0.2.0
Loading...
Searching...
No Matches
JsonSerializable.h
Go to the documentation of this file.
1#ifndef LINTEL_JSONSERIALIZABLE_H
2#define LINTEL_JSONSERIALIZABLE_H
3
4#include <rapidjson/document.h>
5#include <rapidjson/stringbuffer.h>
6#include <rapidjson/writer.h>
7
8#include <string>
9
11
12namespace lintel {
17{
18public:
20 JsonSerializable() = default;
21
23 virtual ~JsonSerializable() = default;
24
30 virtual bool deserialize(const rapidjson::Value &obj) { return false; }
31
36 virtual void serialize(rapidjson::Writer<rapidjson::StringBuffer> *writer) const = 0;
37
43 [[nodiscard]] virtual std::string serialize() const
44 {
45 rapidjson::StringBuffer stringBuffer;
46 rapidjson::Writer writer(stringBuffer);
48 return std::string(stringBuffer.GetString());
49 }
50
55 virtual void deserialize(const std::string &json)
56 {
57 rapidjson::Document document;
58 document.Parse(json.c_str());
59 if (document.HasParseError() || !(document.IsObject() || document.IsArray())) { throw HttpBadRequestException(); }
61 }
62};
63
64}// namespace lintel
65#endif// LINTEL_JSONSERIALIZABLE_H
Definition HttpBadRequestException.h:9
Definition JsonSerializable.h:17
virtual bool deserialize(const rapidjson::Value &obj)
Definition JsonSerializable.h:30
virtual void deserialize(const std::string &json)
Definition JsonSerializable.h:55
virtual std::string serialize() const
Definition JsonSerializable.h:43
virtual void serialize(rapidjson::Writer< rapidjson::StringBuffer > *writer) const =0
virtual ~JsonSerializable()=default
Definition BaseFeature.h:6
constexpr std::string_view type_name()
Definition TypeName.h:9