1
0
Fork 0
owncast-chat-tui/src/proto.rs

87 lines
1.7 KiB
Rust
Raw Normal View History

pub mod http {
#[derive(Debug, serde::Serialize)]
#[allow(unused)]
pub struct RegisterRequest {}
#[derive(Debug, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
#[allow(unused)]
pub struct RegisterResponse {
pub id: String,
pub access_token: String,
pub display_name: String,
}
}
pub mod ws {
#[derive(Debug, serde::Serialize)]
#[allow(unused)]
2024-06-05 03:21:15 +02:00
pub struct Action {
pub r#type: String, // CHAT, ???
pub body: String,
}
2024-06-05 03:21:15 +02:00
impl Action {
pub fn new(body: String) -> Self {
Action {
body, r#type: "CHAT".to_string(),
}
}
}
#[derive(Debug, serde::Deserialize)]
2024-06-05 03:21:15 +02:00
pub struct Event {
pub id: String,
pub timestamp: chrono::DateTime<chrono::Utc>,
#[serde(flatten)]
2024-06-05 03:21:15 +02:00
pub inner: EventInner,
}
// TODO can i avoid repeating id,timestamp,user in each msg type??
#[derive(Debug, serde::Deserialize)]
2025-01-13 22:42:01 +01:00
#[serde(tag = "type", rename_all = "camelCase")]
2024-06-05 03:21:15 +02:00
pub enum EventInner {
#[serde(rename = "CHAT")]
Chat {
body: String,
visible: bool,
2025-01-13 22:42:01 +01:00
user: User,
},
#[serde(rename = "CONNECTED_USER_INFO")]
2025-01-13 22:42:01 +01:00
ConnectedUserInfo {
user: User,
},
#[serde(rename = "USER_JOINED")]
2025-01-13 22:42:01 +01:00
UserJoined {
user: User,
},
#[serde(rename = "USER_PARTED")]
2025-01-13 22:42:01 +01:00
UserParted {
user: User,
},
#[serde(rename = "NAME_CHANGE")]
NameChange {
old_name: String,
user: User,
},
#[serde(rename = "CHAT_ACTION")]
ChatAction {
body: String,
}
}
#[derive(Debug, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
#[allow(unused)]
2024-06-05 03:21:15 +02:00
pub struct User {
pub created_at: chrono::DateTime<chrono::Utc>,
pub name_changed_at: chrono::DateTime<chrono::Utc>,
pub id: String,
pub display_name: String,
pub previous_names: Vec<String>,
pub display_color: i32,
pub is_bot: bool,
pub authenticated: bool,
}
}