Skip to main content

gproxy_protocol/openai/realtime/server_events/
mod.rs

1mod events;
2mod payloads;
3
4pub use events::*;
5pub use payloads::*;
6
7use serde::{Deserialize, Serialize, de};
8use serde_json::Value;
9
10use crate::openai::common::Rest;
11
12#[derive(Debug, Clone, PartialEq, Serialize)]
13#[serde(untagged)]
14#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
15pub enum RealtimeServerEvent {
16    Known(Box<KnownRealtimeServerEvent>),
17    Unknown(UnknownRealtimeServerEvent),
18}
19
20impl<'de> Deserialize<'de> for RealtimeServerEvent {
21    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22        let value = Value::deserialize(deserializer)?;
23        if let Ok(event) = serde_json::from_value::<KnownRealtimeServerEvent>(value.clone()) {
24            return Ok(Self::Known(Box::new(event)));
25        }
26        serde_json::from_value(value)
27            .map(Self::Unknown)
28            .map_err(de::Error::custom)
29    }
30}
31
32#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
33#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
34pub struct UnknownRealtimeServerEvent {
35    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
36    pub type_: Option<String>,
37    #[serde(default, flatten)]
38    pub rest: Rest,
39}