use serde::Serialize;
use super::common::{Blob, Content, EmptyObject};
use super::config::*;
#[derive(Debug, Clone, Serialize)]
pub enum ClientMessage {
#[serde(rename = "setup")]
Setup(SetupConfig),
#[serde(rename = "clientContent")]
ClientContent(ClientContent),
#[serde(rename = "realtimeInput")]
RealtimeInput(RealtimeInput),
#[serde(rename = "toolResponse")]
ToolResponse(ToolResponseMessage),
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetupConfig {
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub generation_config: Option<GenerationConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_instruction: Option<Content>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<Vec<Tool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub realtime_input_config: Option<RealtimeInputConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_resumption: Option<SessionResumptionConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context_window_compression: Option<ContextWindowCompressionConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_audio_transcription: Option<AudioTranscriptionConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_audio_transcription: Option<AudioTranscriptionConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proactivity: Option<ProactivityConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub history_config: Option<HistoryConfig>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ClientContent {
#[serde(skip_serializing_if = "Option::is_none")]
pub turns: Option<Vec<Content>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub turn_complete: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RealtimeInput {
#[serde(skip_serializing_if = "Option::is_none")]
pub audio: Option<Blob>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video: Option<Blob>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub activity_start: Option<EmptyObject>,
#[serde(skip_serializing_if = "Option::is_none")]
pub activity_end: Option<EmptyObject>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio_stream_end: Option<bool>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ToolResponseMessage {
pub function_responses: Vec<FunctionResponse>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FunctionResponse {
pub id: String,
pub name: String,
pub response: serde_json::Value,
}