-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTest.cpp
More file actions
67 lines (58 loc) · 2.06 KB
/
Test.cpp
File metadata and controls
67 lines (58 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "FileUtils.h"
#include "ll/api/reflection/Deserialization.h"
#include "ll/api/reflection/Dispatcher.h"
#include "ll/api/reflection/Serialization.h"
#include "nlohmann/json.hpp"
#include <iostream>
#include <optional>
#include <unordered_map>
#include <vector>
struct Test1 {
void call(bool enable) { std::cout << "Test1::call(" << enable << ")" << std::endl; }
Test1() { std::cout << "Test1::Test1()" << std::endl; }
~Test1() { std::cout << "Test1::~Test1()" << std::endl; }
};
struct Test2 {
void call(bool enable) { std::cout << "Test2::call(" << enable << ")" << std::endl; }
Test2() { std::cout << "Test2::Test2()" << std::endl; }
~Test2() { std::cout << "Test2::~Test2()" << std::endl; }
};
enum class Test3 {
A,
B,
C //
};
struct Config {
ll::reflection::Dispatcher<bool, Test1> test1 = true;
ll::reflection::Dispatcher<bool, Test2> test2 = true;
std::unordered_map<std::string, std::string> test3 = {
{"a", "b"},
{"c", "d"}
};
std::vector<std::string> test4 = {"a", "b", "c"};
std::optional<std::string> test5 = "a";
Test3 test6 = Test3::A;
};
int main() {
auto path = std::filesystem::current_path() / "config.json";
std::optional<Config> result;
try {
result.emplace();
ll::reflection::deserialize(*result, nlohmann::ordered_json::parse(ll::file_utils::readFile(path).value()));
} catch (std::exception& e) {
std::cout << "Error: " << e.what() << std::endl;
}
for (auto& [key, value] : result->test3) {
std::cout << "test3: " << key << ": " << value << std::endl;
}
for (auto& value : result->test4) {
std::cout << "test4: " << value << std::endl;
}
std::cout << "test5: " << result->test5.value_or("none") << std::endl;
std::cout << "test6: " << static_cast<int>(result->test6) << std::endl;
ll::file_utils::writeFile(path, ll::reflection::serialize<nlohmann::ordered_json>(*result).dump(4));
result->test1 = false;
result->test2 = true;
result.reset();
return 0;
}