1#include <nlohmann/json.hpp>
2#include <string>
3
4#include "mtx/events/power_levels.hpp"
5
6using json = nlohmann::json;
7
8namespace mtx {
9namespace events {
10namespace state {
11
12void
13from_json(const json &obj, PowerLevels &power_levels)
14{
15 // SPEC_BUG: Not always present.
16 if (obj.count(key: "ban") != 0)
17 power_levels.ban = obj.at(key: "ban").get<power_level_t>();
18
19 if (obj.count(key: "invite") != 0)
20 power_levels.invite = obj.at(key: "invite").get<power_level_t>();
21
22 if (obj.count(key: "kick") != 0)
23 power_levels.kick = obj.at(key: "kick").get<power_level_t>();
24
25 if (obj.count(key: "redact") != 0)
26 power_levels.redact = obj.at(key: "redact").get<power_level_t>();
27
28 if (obj.count(key: "events") != 0)
29 power_levels.events =
30 obj.at(key: "events").get<std::map<std::string, power_level_t, std::less<>>>();
31 if (obj.count(key: "users") != 0)
32 power_levels.users =
33 obj.at(key: "users").get<std::map<std::string, power_level_t, std::less<>>>();
34
35 if (obj.count(key: "events_default") != 0)
36 power_levels.events_default = obj.at(key: "events_default").get<power_level_t>();
37 if (obj.count(key: "users_default") != 0)
38 power_levels.users_default = obj.at(key: "users_default").get<power_level_t>();
39 if (obj.count(key: "state_default") != 0)
40 power_levels.state_default = obj.at(key: "state_default").get<power_level_t>();
41 if (obj.contains(key: "notifications"))
42 power_levels.notifications =
43 obj.at(key: "notifications").get<std::map<std::string, power_level_t, std::less<>>>();
44}
45
46void
47to_json(json &obj, const PowerLevels &power_levels)
48{
49 obj["ban"] = power_levels.ban;
50 obj["kick"] = power_levels.kick;
51 obj["invite"] = power_levels.invite;
52 obj["redact"] = power_levels.redact;
53
54 if (power_levels.events.size() != 0)
55 obj["events"] = power_levels.events;
56 if (power_levels.users.size() != 0)
57 obj["users"] = power_levels.users;
58
59 obj["events_default"] = power_levels.events_default;
60 obj["users_default"] = power_levels.users_default;
61 obj["state_default"] = power_levels.state_default;
62
63 if (!power_levels.notifications.empty())
64 obj["notifications"] = power_levels.notifications;
65}
66
67} // namespace state
68} // namespace events
69} // namespace mtx
70