1#pragma once
2
3/// @file
4/// @brief State event describing the visibility of the history.
5
6#if __has_include(<nlohmann/json_fwd.hpp>)
7#include <nlohmann/json_fwd.hpp>
8#else
9#include <nlohmann/json.hpp>
10#endif
11
12#include <string>
13
14namespace mtx {
15namespace events {
16namespace state {
17//! The different visibilities.
18enum class Visibility
19{
20 //! All events while this is the `m.room.history_visibility`
21 //! value may be shared by any participating homeserver with anyone,
22 //! regardless of whether they have ever joined the room.
23 WorldReadable,
24 //! Previous events are always accessible to newly joined members.
25 //! All events in the room are accessible, even those sent when
26 //! the member was not a part of the room.
27 Shared,
28 //! Events are accessible to newly joined members from the point
29 //! they were invited onwards. Events stop being accessible when
30 //! the member's state changes to something other than invite or join.
31 Invited,
32 //! Events are accessible to newly joined members from the point
33 //! they joined the room onwards. Events stop being accessible
34 //! when the member's state changes to something other than join.
35 Joined,
36};
37
38std::string
39visibilityToString(const Visibility &rule);
40
41Visibility
42stringToVisibility(const std::string &rule);
43
44//! Content of the `m.room.history_visibility` state event.
45struct HistoryVisibility
46{
47 //! Who can see the room history.
48 Visibility history_visibility;
49
50 friend void from_json(const nlohmann::json &obj, HistoryVisibility &event);
51 friend void to_json(nlohmann::json &obj, const HistoryVisibility &event);
52};
53
54} // namespace state
55} // namespace events
56} // namespace mtx
57