use std::collections::BTreeMap;
use bytes::Bytes;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum SpeechFormat {
Mp3,
Pcm,
}
impl SpeechFormat {
pub fn as_str(self) -> &'static str {
match self {
SpeechFormat::Mp3 => "mp3",
SpeechFormat::Pcm => "pcm",
}
}
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct SpeechRequest {
pub input: String,
pub model: String,
pub voice: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub response_format: Option<SpeechFormat>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub speed: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub provider: Option<SpeechProvider>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct SpeechProvider {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub options: Option<BTreeMap<String, BTreeMap<String, Value>>>,
}
#[derive(Clone, Debug)]
pub struct SpeechResponse {
pub audio: Bytes,
pub content_type: Option<String>,
pub format: SpeechFormat,
}