1#include "mtx/events/create.hpp"
2
3#include <string>
4
5#include <nlohmann/json.hpp>
6
7using json = nlohmann::json;
8
9namespace mtx {
10namespace events {
11namespace state {
12
13void
14from_json(const json &obj, PreviousRoom &predecessor)
15{
16 predecessor.room_id = obj.at(key: "room_id").get<std::string>();
17 predecessor.event_id = obj.at(key: "event_id").get<std::string>();
18}
19void
20to_json(json &obj, const PreviousRoom &predecessor)
21{
22 obj["room_id"] = predecessor.room_id;
23 obj["event_id"] = predecessor.event_id;
24}
25
26void
27from_json(const json &obj, Create &create)
28{
29 create.creator = obj.at(key: "creator").get<std::string>();
30
31 if (obj.contains(key: "type") && obj.at(key: "type").is_string())
32 create.type = obj.at(key: "type").get<std::string>();
33
34 if (obj.find(key: "m.federate") != obj.end())
35 create.federate = obj.at(key: "m.federate").get<bool>();
36
37 // Assume room verison 1 for events where it's not specified
38 if (obj.find(key: "room_version") != obj.end())
39 create.room_version = obj.at(key: "room_version").get<std::string>();
40 else
41 create.room_version = "1";
42
43 if (obj.find(key: "predecessor") != obj.end())
44 create.predecessor = obj.at(key: "predecessor").get<PreviousRoom>();
45}
46
47void
48to_json(json &obj, const Create &create)
49{
50 if (!create.creator.empty())
51 obj["creator"] = create.creator;
52 obj["m.federate"] = create.federate;
53 if (!create.room_version.empty())
54 obj["room_version"] = create.room_version;
55
56 if (create.type)
57 obj["type"] = create.type.value();
58 if (create.predecessor)
59 obj["predecessor"] = *create.predecessor;
60}
61
62} // namespace state
63} // namespace events
64} // namespace mtx
65