outfox_openai/spec/realtime/
form.rs1#[cfg(feature = "realtime")]
2use crate::{error::OpenAIError, traits::AsyncTryFrom};
3
4#[cfg(feature = "realtime")]
5impl AsyncTryFrom<crate::spec::realtime::RealtimeCallCreateRequest> for reqwest::multipart::Form {
6 type Error = OpenAIError;
7
8 async fn try_from(
9 request: crate::spec::realtime::RealtimeCallCreateRequest,
10 ) -> Result<Self, Self::Error> {
11 use reqwest::multipart::Part;
12
13 let sdp_part = Part::text(request.sdp)
15 .mime_str("application/sdp")
16 .map_err(|e| OpenAIError::InvalidArgument(format!("Invalid content type: {}", e)))?;
17
18 let mut form = reqwest::multipart::Form::new().part("sdp", sdp_part);
19
20 if let Some(session) = request.session {
22 let session_json = serde_json::to_string(&session).map_err(|e| {
23 OpenAIError::InvalidArgument(format!("Failed to serialize session: {}", e))
24 })?;
25 let session_part = Part::text(session_json)
26 .mime_str("application/json")
27 .map_err(|e| {
28 OpenAIError::InvalidArgument(format!("Invalid content type: {}", e))
29 })?;
30 form = form.part("session", session_part);
31 }
32
33 Ok(form)
34 }
35}