use serde::Deserialize; use std::collections::HashMap; #[derive(Deserialize)] pub struct SyncResponse { pub next_batch: String, pub rooms: Option, pub presence: Option, pub account_data: Option, pub to_device: Option, pub device_lists: Option, pub device_one_time_keys_count: Option>, } #[derive(Deserialize)] pub struct Rooms { pub join: Option>, pub invite: Option>, pub leave: Option>, } #[derive(Deserialize)] pub struct JoinedRoom { pub summary: Option, pub state: Option, pub timeline: Option, pub ephemeral: Option, pub account_date: Option, pub unread_notifications: Option, } #[derive(Deserialize)] pub struct RoomSummary { #[serde(rename = "m.heroes")] pub heros: Option>, #[serde(rename = "m.joined_member_count")] pub joined_member_count: Option, #[serde(rename = "m.invited_member_count")] pub invited_member_count: Option, } #[derive(Deserialize)] pub struct State { pub events: Option, } #[derive(Deserialize)] pub struct StateEvents { pub content: serde_json::value::Value, // This is an json object pub r#type: String, pub event_id: String, pub sender: String, pub origin_server_ts: u64, pub unsigned: Option, pub prev_content: Option, pub state_key: String, } #[derive(Deserialize)] pub struct UnsignedData { pub age: Option, pub redacted_because: Option, pub transaction_id: Option, } #[derive(Deserialize)] pub struct Event { pub content: serde_json::value::Value, // Json object pub r#type: String, } #[derive(Deserialize)] pub struct EventContent { pub avatar_url: Option, pub displayname: Option, //type is string or null???? pub membership: Membership, pub state_key: String, } #[derive(Deserialize)] #[serde(rename_all = "lowercase")] pub enum Membership { Invite, Join, Knock, Leave, Ban, } #[derive(Deserialize)] pub struct Timeline { pub events: Option>, pub limited: Option, pub prev_batch: Option, } #[derive(Deserialize)] pub struct RoomEvent { pub content: String, pub r#type: String, pub event_id: String, pub sender: String, pub origin_server_ts: u64, pub unsigned: Option, } #[derive(Deserialize)] pub struct Ephemeral { pub events: Option>, } #[derive(Deserialize)] pub struct AccountData { pub events: Option>, } #[derive(Deserialize)] pub struct UnreadNotificationCounts { pub highlight_count: Option, pub notification_count: Option, } #[derive(Deserialize)] pub struct InvitedRoom { pub invite_state: Option, } #[derive(Deserialize)] pub struct InviteState { pub events: Option>, } #[derive(Deserialize)] pub struct StrippedState { pub content: EventContent, pub state_key: String, pub r#type: String, pub sender: String, } #[derive(Deserialize)] pub struct LeftRoom { pub state: Option, pub timeline: Option, pub account_data: Option, } #[derive(Deserialize)] pub struct Presence { pub events: Option>, } #[derive(Deserialize)] pub struct ToDevice { pub events: Option>, } #[derive(Deserialize)] pub struct ToDeviceEvent { pub content: Option, pub sender: Option, pub r#type: Option, } #[derive(Deserialize)] pub struct DeviceLists { pub changed: Option>, pub left: Option>, }