Skip to main content

axfive_matrix_dicebot/
matrix.rs

1use serde::{self, Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Serialize, Deserialize, Debug)]
5#[serde(tag = "msgtype")]
6#[serde(rename = "m.notice")]
7pub struct NoticeMessage {
8    pub body: String,
9
10    #[serde(default)]
11    pub format: Option<String>,
12
13    #[serde(default)]
14    pub formatted_body: Option<String>,
15}
16
17#[derive(Serialize, Deserialize, Debug)]
18#[serde(tag = "msgtype")]
19#[serde(rename = "m.text")]
20pub struct TextMessage {
21    body: String,
22
23    #[serde(default)]
24    format: Option<String>,
25
26    #[serde(default)]
27    formatted_body: Option<String>,
28}
29
30impl TextMessage {
31    pub fn body(&self) -> &str {
32        &self.body
33    }
34}
35
36// Need untagged because redactions are blank
37#[derive(Serialize, Deserialize, Debug)]
38#[serde(untagged)]
39pub enum MessageContent {
40    Text(TextMessage),
41    Other(serde_json::Value),
42}
43
44#[derive(Serialize, Deserialize, Debug)]
45pub struct RoomEvent {
46    pub content: MessageContent,
47    pub event_id: String,
48    pub sender: String,
49}
50
51#[derive(Serialize, Deserialize, Debug)]
52#[serde(tag = "type")]
53pub enum Event {
54    #[serde(rename = "m.room.message")]
55    Room(RoomEvent),
56
57    #[serde(other)]
58    Other,
59}
60
61#[derive(Serialize, Deserialize, Debug)]
62pub struct Timeline {
63    pub events: Vec<Event>,
64}
65
66#[derive(Serialize, Deserialize, Debug)]
67pub struct Room {
68    pub timeline: Timeline,
69}
70
71#[derive(Serialize, Deserialize, Debug)]
72pub struct Rooms {
73    pub invite: HashMap<String, serde_json::Value>,
74    pub join: HashMap<String, Room>,
75}
76
77#[derive(Serialize, Deserialize, Debug)]
78pub struct SyncCommand {
79    pub next_batch: String,
80    pub rooms: Rooms,
81}