Wizard
Software Engineering Project - Wizard
Loading...
Searching...
No Matches
serializable_value.h
1//
2// Created by Manuel on 04.02.2021.
3//
4// A serializable value. Supported value types are:
5// bool
6// int
7// unsigned int
8// int64_t
9// uint64_t
10// float
11// double
12// string
13
14#ifndef WIZARD_SERIALIZABLE_VALUE_H
15#define WIZARD_SERIALIZABLE_VALUE_H
16
17
18#include <vector>
19#include <iostream>
20#include <functional>
21
22#include "unique_serializable.h"
23#include "value_type_helpers.h"
24#include "../../../rapidjson/include/rapidjson/document.h"
25
26template <class T>
28
29private:
30 T _value;
31
32
33public:
34
35 serializable_value(T val) : serializable(), _value(val) { }
36
37 T get_value() const { return this->_value; }
38
39 void set_value(T val) {
40 if (this->_value != val) {
41 this->_value = val;
42 }
43 }
44
45// serializable interface
46 virtual void write_into_json(rapidjson::Value& json, rapidjson::Document::AllocatorType& allocator) const override {
47 json.AddMember("value", value_type_helpers::get_json_value<decltype(_value)>(_value, allocator), allocator);
48 }
49
50 static serializable_value<T>* from_json(const rapidjson::Value& json) {
51 if (json.HasMember("value")) {
52 T val = json["value"].Get<T>();
53 return new serializable_value<T>(val);
54 }
55 return nullptr;
56 }
57};
58
59
60
61#endif //WIZARD_SERIALIZABLE_VALUE_H
Definition serializable_value.h:27
Definition serializable.h:11