Wizard
Software Engineering Project - Wizard
Loading...
Searching...
No Matches
value_type_helpers.h
1//
2// Created by Manuel on 09.02.2021.
3//
4// Helper functions for serializing and deserializing instances of serializable_value.
5
6#ifndef WIZARD_VALUE_TYPE_HELPERS_H
7#define WIZARD_VALUE_TYPE_HELPERS_H
8
9#include <unordered_map>
10
11
12namespace value_type_helpers {
13
14 enum ValueType {
15 intType,
16 uintType,
17 boolType,
18 floatType,
19 doubleType,
20 stringType,
21 int64tType,
22 uint64tType
23 };
24
25
26// for deserialization
27 const std::unordered_map<std::string, ValueType> _string_to_value_type = {
28 {"int", ValueType::intType },
29 {"uint", ValueType::uintType},
30 {"bool", ValueType::boolType},
31 {"float", ValueType::floatType},
32 {"double", ValueType::doubleType},
33 {"int64t", ValueType::int64tType},
34 {"uint64t", ValueType::uint64tType},
35 {"string", ValueType::stringType}
36 };
37
38// for serialization
39 const std::unordered_map<ValueType, std::string> _value_type_to_string = {
40 { ValueType::intType, "int" },
41 { ValueType::uintType, "uint"},
42 { ValueType::boolType, "bool"},
43 { ValueType::floatType, "float"},
44 { ValueType::doubleType, "double"},
45 { ValueType::int64tType, "int64t"},
46 { ValueType::uint64tType, "uint64t"},
47 { ValueType::stringType, "string"},
48 };
49
50 template<typename T>
51 static rapidjson::Value get_json_value(T val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator);
52
53 template<typename T>
54 static rapidjson::Value get_json_value_type(T val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator);
55
56 template<>
57 rapidjson::Value
58 get_json_value<bool>(bool val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
59 return rapidjson::Value(val);
60 }
61
62 template<>
63 rapidjson::Value
64 get_json_value<int>(int val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
65 return rapidjson::Value(val);
66 }
67
68 template<>
69 rapidjson::Value
70 get_json_value<float>(float val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
71 return rapidjson::Value(val);
72 }
73
74 template<>
75 rapidjson::Value
76 get_json_value<double>(double val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
77 return rapidjson::Value(val);
78 }
79
80 template<>
81 rapidjson::Value
82 get_json_value<unsigned int>(unsigned int val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
83 return rapidjson::Value(val);
84 }
85
86 template<>
87 rapidjson::Value
88 get_json_value<int64_t>(int64_t val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
89 return rapidjson::Value(val);
90 }
91
92 template<>
93 rapidjson::Value
94 get_json_value<uint64_t>(uint64_t val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
95 return rapidjson::Value(val);
96 }
97
98 template<>
99 rapidjson::Value
100 get_json_value<std::string>(std::string val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
101 rapidjson::Value json_val;
102 json_val.SetString(val.c_str(), allocator);
103 return json_val;
104 }
105
106
107 template<>
108 rapidjson::Value
109 get_json_value_type<bool>(bool val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
110 return rapidjson::Value(std::string("bool").c_str(), allocator);
111 }
112
113 template<>
114 rapidjson::Value
115 get_json_value_type<int>(int val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
116 return rapidjson::Value(std::string("int").c_str(), allocator);
117 }
118
119 template<>
120 rapidjson::Value
121 get_json_value_type<float>(float val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
122 return rapidjson::Value(std::string("float").c_str(), allocator);
123 }
124
125 template<>
126 rapidjson::Value
127 get_json_value_type<double>(double val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
128 return rapidjson::Value(std::string("double").c_str(), allocator);
129 }
130
131 template<>
132 rapidjson::Value
133 get_json_value_type<unsigned int>(unsigned int val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
134 return rapidjson::Value(std::string("unsigned int").c_str(), allocator);
135 }
136
137 template<>
138 rapidjson::Value
139 get_json_value_type<int64_t>(int64_t val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
140 return rapidjson::Value(std::string("int64_t").c_str(), allocator);
141 }
142
143 template<>
144 rapidjson::Value
145 get_json_value_type<uint64_t>(uint64_t val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
146 return rapidjson::Value(std::string("int64_t").c_str(), allocator);
147 }
148
149 template<>
150 rapidjson::Value
151 get_json_value_type<std::string>(std::string val, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> &allocator) {
152 return rapidjson::Value(std::string("string").c_str(), allocator);
153 }
154}
155
156
157
158#endif //WIZARD_VALUE_TYPE_HELPERS_H