llm_sdk/
audio_part_utils.rs1use crate::{AudioFormat, LanguageModelError, LanguageModelResult};
2
3#[must_use]
4pub fn map_audio_format_to_mime_type(format: &AudioFormat) -> String {
5    match format {
6        AudioFormat::Wav => "audio/wav",
7        AudioFormat::Mp3 => "audio/mp3",
8        AudioFormat::Linear16 => "audio/l16",
9        AudioFormat::Flac => "audio/flac",
10        AudioFormat::Mulaw | AudioFormat::Alaw => "audio/basic",
11        AudioFormat::Aac => "audio/aac",
12        AudioFormat::Opus => "audio/opus",
13    }
14    .to_string()
15}
16
17pub fn map_mime_type_to_audio_format(mime_type: &str) -> LanguageModelResult<AudioFormat> {
21    let formatted_mime_type = mime_type
22        .split(';')
23        .next()
24        .unwrap_or(mime_type)
25        .trim()
26        .to_lowercase();
27    Ok(match formatted_mime_type.as_str() {
28        "audio/wav" => AudioFormat::Wav,
29        "audio/mp3" | "audio/mpeg" => AudioFormat::Mp3,
30        "audio/l16" => AudioFormat::Linear16,
31        "audio/flac" => AudioFormat::Flac,
32        "audio/basic" => AudioFormat::Mulaw, "audio/aac" => AudioFormat::Aac,
34        "audio/opus" => AudioFormat::Opus,
35        _ => Err(LanguageModelError::Invariant(
36            "",
37            format!("Unsupported audio mime type: {mime_type}"),
38        ))?,
39    })
40}