49 lines
1.4 KiB
Rust
49 lines
1.4 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
#[serde(tag = "type")]
|
|
pub enum WsInbound {
|
|
#[serde(rename = "user_input")]
|
|
UserInput {
|
|
content: String,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
channel: Option<String>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
chat_id: Option<String>,
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
sender_id: Option<String>,
|
|
},
|
|
#[serde(rename = "clear_history")]
|
|
ClearHistory {
|
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
chat_id: Option<String>,
|
|
},
|
|
#[serde(rename = "ping")]
|
|
Ping,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
#[serde(tag = "type")]
|
|
pub enum WsOutbound {
|
|
#[serde(rename = "assistant_response")]
|
|
AssistantResponse { id: String, content: String, role: String },
|
|
#[serde(rename = "error")]
|
|
Error { code: String, message: String },
|
|
#[serde(rename = "session_established")]
|
|
SessionEstablished { session_id: String },
|
|
#[serde(rename = "pong")]
|
|
Pong,
|
|
}
|
|
|
|
pub fn parse_inbound(raw: &str) -> Result<WsInbound, serde_json::Error> {
|
|
serde_json::from_str(raw)
|
|
}
|
|
|
|
pub fn serialize_inbound(msg: &WsInbound) -> Result<String, serde_json::Error> {
|
|
serde_json::to_string(msg)
|
|
}
|
|
|
|
pub fn serialize_outbound(msg: &WsOutbound) -> Result<String, serde_json::Error> {
|
|
serde_json::to_string(msg)
|
|
}
|