1#include <nlohmann/json.hpp>
2#include <string>
3
4#include "mtx/events/member.hpp"
5
6using json = nlohmann::json;
7
8namespace mtx {
9namespace events {
10namespace state {
11
12std::string
13membershipToString(const Membership &membership)
14{
15 switch (membership) {
16 case Membership::Join:
17 return "join";
18 case Membership::Invite:
19 return "invite";
20 case Membership::Ban:
21 return "ban";
22 case Membership::Leave:
23 return "leave";
24 case Membership::Knock:
25 return "knock";
26 }
27
28 return "";
29}
30
31Membership
32stringToMembership(const std::string &membership)
33{
34 if (membership == "join")
35 return Membership::Join;
36 else if (membership == "invite")
37 return Membership::Invite;
38 else if (membership == "ban")
39 return Membership::Ban;
40 else if (membership == "leave")
41 return Membership::Leave;
42
43 return Membership::Knock;
44}
45
46void
47from_json(const json &obj, Member &member)
48{
49 member.membership = stringToMembership(membership: obj.at(key: "membership").get<std::string>());
50
51 if (obj.count(key: "displayname") != 0 && !obj.at(key: "displayname").is_null())
52 member.display_name = obj.at(key: "displayname").get<std::string>();
53
54 if (obj.count(key: "avatar_url") != 0 && !obj.at(key: "avatar_url").is_null())
55 member.avatar_url = obj.at(key: "avatar_url").get<std::string>();
56
57 if (obj.find(key: "is_direct") != obj.end())
58 member.is_direct = obj.at(key: "is_direct").get<bool>();
59
60 if (auto r = obj.find(key: "reason"); r != obj.end() && r->is_string())
61 member.reason = obj.at(key: "reason").get<std::string>();
62
63 if (obj.contains(key: "join_authorised_via_users_server"))
64 member.join_authorised_via_users_server =
65 obj.at(key: "join_authorised_via_users_server").get<std::string>();
66}
67
68void
69to_json(json &obj, const Member &member)
70{
71 obj["membership"] = membershipToString(membership: member.membership);
72 obj["avatar_url"] = member.avatar_url;
73 obj["displayname"] = member.display_name;
74 obj["is_direct"] = member.is_direct;
75
76 if (!member.reason.empty())
77 obj["reason"] = member.reason;
78
79 if (!member.join_authorised_via_users_server.empty())
80 obj["join_authorised_via_users_server"] = member.join_authorised_via_users_server;
81}
82
83} // namespace state
84} // namespace events
85} // namespace mtx
86