86 lines
1.7 KiB
Rust
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,
|
|
}
|
|
}
|