use serde::{Deserialize, Serialize};
pub const PROTOCOL_VERSION: &str = "1.0";
#[derive(Debug, Serialize)]
#[serde(tag = "type", rename_all = "snake_case")]
#[non_exhaustive]
pub enum ServerMessage {
Ready {
model: String,
sample_rate: u32,
version: String,
#[serde(skip_serializing_if = "Vec::is_empty")]
supported_rates: Vec<u32>,
#[serde(skip_serializing_if = "std::ops::Not::not")]
diarization: bool,
#[serde(skip_serializing_if = "Option::is_none")]
min_protocol_version: Option<String>,
max_session_secs: u64,
idle_timeout_secs: u64,
},
Partial(crate::inference::TranscriptSegment),
Final(crate::inference::TranscriptSegment),
Error {
message: String,
code: String,
#[serde(skip_serializing_if = "Option::is_none")]
retry_after_ms: Option<u32>,
},
}
#[derive(Debug, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
#[non_exhaustive]
pub enum ClientMessage {
Stop,
#[non_exhaustive]
Configure {
#[serde(default)]
sample_rate: Option<u32>,
#[serde(default)]
diarization: Option<bool>,
#[serde(default)]
protocol_version: Option<String>,
#[serde(default)]
punctuation: Option<bool>,
#[serde(default)]
itn: Option<bool>,
#[serde(default)]
endpoint_mode: Option<String>,
#[serde(default)]
min_silence_ms: Option<u32>,
},
}
#[cfg(test)]
mod tests;