1#include "mtx/responses/capabilities.hpp"
2
3#include <nlohmann/json.hpp>
4
5namespace mtx::responses::capabilities {
6void
7from_json(const nlohmann::json &obj, RoomVersionStability &stab)
8{
9 if (obj == "stable")
10 stab = RoomVersionStability::Stable;
11 else
12 stab = RoomVersionStability::Unstable;
13}
14
15void
16from_json(const nlohmann::json &obj, RoomVersionsCapability &cap)
17{
18 cap.available = obj.value(key: "available",
19 default_value: std::map<std::string, RoomVersionStability>{
20 {"1", RoomVersionStability::Stable},
21 });
22 cap.default_ = obj.value(key: "default", default_value: "1");
23}
24
25void
26from_json(const nlohmann::json &obj, Enabled &cap)
27{
28 cap.enabled = obj.value(key: "enabled", default_value: true);
29}
30
31void
32from_json(const nlohmann::json &obj, Capabilities &caps)
33{
34 if (obj.contains(key: "capabilities") && obj.at(key: "capabilities").is_object()) {
35 const auto &j = obj.at(key: "capabilities");
36
37 caps.room_versions = j.value(key: "m.room_versions", default_value: RoomVersionsCapability{});
38 caps.change_password = j.value(key: "m.change_password", default_value: Enabled{});
39 caps.set_displayname = j.value(key: "m.set_displayname", default_value: Enabled{});
40 caps.set_avatar_url = j.value(key: "m.set_avatar_url", default_value: Enabled{});
41 caps.change_3pid = j.value(key: "m.3pid_changes", default_value: Enabled{});
42 }
43}
44}
45