1 | #include <nlohmann/json.hpp> |
2 | |
3 | #include "mtx/common.hpp" |
4 | #include "mtx/identifiers.hpp" |
5 | #include "mtx/responses/common.hpp" |
6 | #include "mtx/responses/public_rooms.hpp" |
7 | |
8 | namespace mtx { |
9 | namespace responses { |
10 | |
11 | void |
12 | from_json(const nlohmann::json &obj, PublicRoomVisibility &res) |
13 | { |
14 | res.visibility = mtx::common::stringToVisibility(s: obj.at(key: "visibility" ).get<std::string>()); |
15 | } |
16 | |
17 | void |
18 | from_json(const nlohmann::json &obj, PublicRoomsChunk &res) |
19 | { |
20 | res.aliases = obj.value(key: "aliases" , default_value: std::vector<std::string>{}); |
21 | |
22 | res.canonical_alias = obj.value(key: "canonical_alias" , default_value: std::string{}); |
23 | |
24 | res.name = obj.value(key: "name" , default_value: std::string{}); |
25 | |
26 | res.num_joined_members = obj.at(key: "num_joined_members" ).get<size_t>(); |
27 | |
28 | res.room_id = obj.at(key: "room_id" ).get<std::string>(); |
29 | |
30 | res.topic = obj.value(key: "topic" , default_value: std::string{}); |
31 | |
32 | res.world_readable = obj.at(key: "world_readable" ).get<bool>(); |
33 | |
34 | res.guest_can_join = obj.at(key: "guest_can_join" ).get<bool>(); |
35 | |
36 | res.avatar_url = obj.value(key: "avatar_url" , default_value: std::string{}); |
37 | |
38 | res.join_rule = mtx::events::state::stringToJoinRule(rule: obj.value(key: "join_rule" , default_value: "public" )); |
39 | |
40 | res.room_type = obj.value(key: "room_type" , default_value: std::string{}); |
41 | |
42 | res.room_version = obj.value(key: "im.nheko.summary.room_version" , |
43 | default_value: obj.value(key: "im.nheko.summary.version" , default_value: std::string{})); |
44 | |
45 | res.membership = mtx::events::state::stringToMembership( |
46 | membership: obj.value(key: "membership" , default_value: obj.value(key: "im.nheko.summary.membership" , default_value: "leave" ))); |
47 | |
48 | res.encryption = obj.value(key: "im.nheko.summary.encryption" , default_value: std::string{}); |
49 | |
50 | if (obj.contains(key: "children_state" )) |
51 | mtx::responses::utils::parse_stripped_events(events: obj.at(key: "children_state" ), container&: res.children_state); |
52 | } |
53 | |
54 | void |
55 | from_json(const nlohmann::json &obj, PublicRooms &publicRooms) |
56 | { |
57 | // PublicRoomsChunk is CopyConstructible & DefaultConstructible |
58 | publicRooms.chunk = obj.at(key: "chunk" ).get<std::vector<PublicRoomsChunk>>(); |
59 | |
60 | if (obj.count(key: "next_batch" )) { |
61 | publicRooms.next_batch = obj.at(key: "next_batch" ).get<std::string>(); |
62 | } |
63 | |
64 | if (obj.count(key: "prev_batch" )) { |
65 | publicRooms.prev_batch = obj.at(key: "prev_batch" ).get<std::string>(); |
66 | } |
67 | |
68 | publicRooms.total_room_count_estimate = |
69 | obj.count(key: "total_room_count_estimate" ) |
70 | ? std::optional<size_t>{obj.at(key: "total_room_count_estimate" ).get<size_t>()} |
71 | : std::nullopt; |
72 | } |
73 | |
74 | void |
75 | from_json(const nlohmann::json &obj, HierarchyRooms &publicRooms) |
76 | { |
77 | publicRooms.rooms = obj.at(key: "rooms" ).get<std::vector<PublicRoomsChunk>>(); |
78 | |
79 | if (obj.count(key: "next_batch" )) { |
80 | publicRooms.next_batch = obj.at(key: "next_batch" ).get<std::string>(); |
81 | } |
82 | } |
83 | |
84 | } // namespace responses |
85 | } // namespace mtx |
86 | |