use serde::{Deserialize, Serialize};
#[cfg(feature = "openapi")]
use utoipa::ToSchema;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct FileWrittenData {
pub path: String,
pub operation: String,
pub size_bytes: i64,
pub created: bool,
}
pub const FILE_OP_UPDATE: &str = "update";
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct BudgetEventData {
pub budget_id: String,
pub balance: f64,
pub limit: f64,
pub currency: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub soft_limit: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct VoiceSessionStartedData {
#[cfg_attr(
feature = "openapi",
schema(example = "voice_01933b5a00007000800000000000001")
)]
pub voice_connection_id: String,
#[cfg_attr(feature = "openapi", schema(example = "gpt-realtime"))]
pub model: String,
#[cfg_attr(feature = "openapi", schema(example = "alloy"))]
pub voice: String,
#[cfg_attr(feature = "openapi", schema(example = "medium"))]
pub reasoning_effort: String,
#[cfg_attr(feature = "openapi", schema(example = "webrtc"))]
pub transport: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct VoiceTranscriptData {
pub voice_connection_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub item_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub response_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub phase: Option<String>,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub delta: String,
pub accumulated: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct VoiceSessionEndedData {
#[cfg_attr(
feature = "openapi",
schema(example = "voice_01933b5a00007000800000000000001")
)]
pub voice_connection_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[cfg_attr(
feature = "openapi",
schema(example = "User hung up after refund confirmed.")
)]
pub reason: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[cfg_attr(feature = "openapi", schema(example = 184_500_u64))]
pub duration_ms: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct VoiceSessionFailedData {
#[cfg_attr(
feature = "openapi",
schema(example = "voice_01933b5a00007000800000000000001")
)]
pub voice_connection_id: String,
#[cfg_attr(
feature = "openapi",
schema(example = "realtime provider closed stream: 1011 internal_error")
)]
pub error: String,
}