1 | #include <nlohmann/json.hpp> |
---|---|
2 | #include <string> |
3 | |
4 | #include "mtx/events/join_rules.hpp" |
5 | |
6 | using json = nlohmann::json; |
7 | |
8 | namespace mtx { |
9 | namespace events { |
10 | namespace state { |
11 | |
12 | std::string |
13 | joinRuleToString(const JoinRule &rule) |
14 | { |
15 | switch (rule) { |
16 | case JoinRule::Public: |
17 | return "public"; |
18 | case JoinRule::Invite: |
19 | return "invite"; |
20 | case JoinRule::Knock: |
21 | return "knock"; |
22 | case JoinRule::Private: |
23 | return "private"; |
24 | case JoinRule::Restricted: |
25 | return "restricted"; |
26 | case JoinRule::KnockRestricted: |
27 | return "knock_restricted"; |
28 | } |
29 | |
30 | return ""; |
31 | } |
32 | |
33 | JoinRule |
34 | stringToJoinRule(const std::string &rule) |
35 | { |
36 | if (rule == "public") |
37 | return JoinRule::Public; |
38 | else if (rule == "invite") |
39 | return JoinRule::Invite; |
40 | else if (rule == "knock") |
41 | return JoinRule::Knock; |
42 | else if (rule == "restricted") |
43 | return JoinRule::Restricted; |
44 | else if (rule == "knock_restricted") |
45 | return JoinRule::KnockRestricted; |
46 | |
47 | return JoinRule::Private; |
48 | } |
49 | |
50 | void |
51 | from_json(const json &obj, JoinAllowance &allowance) |
52 | { |
53 | if (obj.value(key: "type", default_value: "") == "m.room_membership") |
54 | allowance.type = JoinAllowanceType::RoomMembership; |
55 | else |
56 | allowance.type = JoinAllowanceType::Unknown; |
57 | |
58 | allowance.room_id = obj.value(key: "room_id", default_value: ""); |
59 | } |
60 | |
61 | void |
62 | to_json(json &obj, const JoinAllowance &allowance) |
63 | { |
64 | obj = nlohmann::json::object(); |
65 | if (allowance.type == JoinAllowanceType::RoomMembership) { |
66 | obj["type"] = "m.room_membership"; |
67 | obj["room_id"] = allowance.room_id; |
68 | } |
69 | } |
70 | |
71 | void |
72 | from_json(const json &obj, JoinRules &join_rules) |
73 | { |
74 | join_rules.join_rule = stringToJoinRule(rule: obj.value(key: "join_rule", default_value: "")); |
75 | |
76 | if (obj.contains(key: "allow")) |
77 | join_rules.allow = obj.at(key: "allow").get<decltype(join_rules.allow)>(); |
78 | } |
79 | |
80 | void |
81 | to_json(json &obj, const JoinRules &join_rules) |
82 | { |
83 | obj["join_rule"] = joinRuleToString(rule: join_rules.join_rule); |
84 | |
85 | if (!join_rules.allow.empty()) |
86 | obj["allow"] = join_rules.allow; |
87 | } |
88 | |
89 | } // namespace state |
90 | } // namespace events |
91 | } // namespace mtx |
92 |