Skip to main content

gproxy_protocol/protocol/openai/audio/
enums.rs

1macro_rules! audio_string_enum {
2    ($outer:ident, $known:ident { $($variant:ident => $wire:literal),+ $(,)? }) => {
3        #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize)]
4        #[serde(untagged)]
5        #[non_exhaustive]
6        pub enum $outer {
7            Known($known),
8            Unknown(String),
9        }
10
11        impl<'de> serde::Deserialize<'de> for $outer {
12            fn deserialize<D: serde::Deserializer<'de>>(d: D) -> Result<Self, D::Error> {
13                crate::protocol::extensible::deserialize_extensible(d, Self::Known, Self::Unknown)
14            }
15        }
16
17        #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
18        #[non_exhaustive]
19        pub enum $known {
20            $(#[serde(rename = $wire)] $variant,)+
21        }
22    };
23}
24
25audio_string_enum!(SpeechResponseFormat, SpeechResponseFormatKnown {
26    Mp3 => "mp3",
27    Opus => "opus",
28    Aac => "aac",
29    Flac => "flac",
30    Wav => "wav",
31    Pcm => "pcm",
32});
33
34audio_string_enum!(SpeechStreamFormat, SpeechStreamFormatKnown {
35    Sse => "sse",
36    Audio => "audio",
37});
38
39audio_string_enum!(TranscriptionResponseFormat, TranscriptionResponseFormatKnown {
40    Json => "json",
41    Text => "text",
42    Srt => "srt",
43    VerboseJson => "verbose_json",
44    Vtt => "vtt",
45    DiarizedJson => "diarized_json",
46});
47
48audio_string_enum!(TranslationResponseFormat, TranslationResponseFormatKnown {
49    Json => "json",
50    Text => "text",
51    Srt => "srt",
52    VerboseJson => "verbose_json",
53    Vtt => "vtt",
54});
55
56audio_string_enum!(TimestampGranularity, TimestampGranularityKnown {
57    Word => "word",
58    Segment => "segment",
59});
60
61audio_string_enum!(TranscriptionInclude, TranscriptionIncludeKnown {
62    Logprobs => "logprobs",
63});
64
65#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
66#[non_exhaustive]
67pub enum AudioTokenUsageType {
68    #[serde(rename = "tokens")]
69    Tokens,
70}
71
72#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
73#[non_exhaustive]
74pub enum AudioDurationUsageType {
75    #[serde(rename = "duration")]
76    Duration,
77}