1#pragma once
2
3/// @file
4/// @brief A widget in account data or a room
5
6#include <map>
7
8#if __has_include(<nlohmann/json_fwd.hpp>)
9#include <nlohmann/json_fwd.hpp>
10#else
11#include <nlohmann/json.hpp>
12#endif
13
14namespace mtx {
15namespace events {
16namespace state {
17//! Content of the `m.widget` event.
18///
19/// https://github.com/matrix-org/matrix-doc/issues/1236
20struct Widget
21{
22 //! Required. The type of widget. This is used to determine which widgets can be grouped
23 //! together on the UI (e.g multiple grafana graphs together).
24 std::string type;
25
26 //! Required. The URL of the widget. All widget-enabled matrix clients need to transform this
27 //! URL into a final URL which they will perform an HTTP GET to. All substituted values are
28 //! url-encoded.
29 std::string url;
30
31 //! Optional. A human-readable string which can be displayed instead of, or in addition to, the
32 //! embedded `<iframe>`.
33 std::string name;
34
35 //! Unique id
36 std::string id;
37
38 //! Optional (unless required by a widget type below). Arbitrary key/value pairs.
39 std::map<std::string, std::string> data;
40
41 //! This flag is used to denote whether the client should display a placeholder / loading
42 //! spinner while waiting for the widget content to return a loaded event.
43 bool waitForIframeLoad = true;
44
45 //! The creatorUserID field is required. It is used to identify the user that added the widget
46 //! instance (as opposed to the user that last modified the widget instance, as given by the
47 //! 'sender' field on the m.widgets event).
48 std::string creatorUserId;
49
50 friend void from_json(const nlohmann::json &obj, Widget &create);
51 friend void to_json(nlohmann::json &obj, const Widget &create);
52};
53
54} // namespace state
55} // namespace events
56} // namespace mtx
57