axfive_matrix_dicebot/
matrix.rs1use 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#[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}