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

86 lines
1.7 KiB
Rust

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)]
pub struct Action {
pub r#type: String, // CHAT, ???
pub body: String,
}
impl Action {
pub fn new(body: String) -> Self {
Action {
body, r#type: "CHAT".to_string(),
}
}
}
#[derive(Debug, serde::Deserialize)]
pub struct Event {
pub id: String,
pub timestamp: chrono::DateTime<chrono::Utc>,
#[serde(flatten)]
pub inner: EventInner,
}
// TODO can i avoid repeating id,timestamp,user in each msg type??
#[derive(Debug, serde::Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum EventInner {
#[serde(rename = "CHAT")]
Chat {
body: String,
visible: bool,
user: User,
},
#[serde(rename = "CONNECTED_USER_INFO")]
ConnectedUserInfo {
user: User,
},
#[serde(rename = "USER_JOINED")]
UserJoined {
user: User,
},
#[serde(rename = "USER_PARTED")]
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)]
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,
}
}