rust_ai/azure/types/
common.rs

1use reqwest::header::HeaderValue;
2
3/// Available gender variants implemented for Azure.
4#[derive(Debug, Clone)]
5pub enum Gender {
6    Male,
7    Female,
8}
9
10impl Into<String> for Gender {
11    fn into(self) -> String {
12        (match self {
13            Self::Male => "Male",
14            Self::Female => "Female",
15        })
16        .into()
17    }
18}
19
20/// Describes what type of data is wrapped inside: byte vector, plain text
21/// or JSON.
22#[derive(Debug, Clone)]
23pub enum ResponseType {
24    Bytes(Vec<u8>),
25    Text(String),
26}
27
28/// Describes how to treat the response data: as bytes or plain text/JSON.
29#[derive(Debug, Clone)]
30pub enum ResponseExpectation {
31    Bytes,
32    Text,
33}
34
35/// Microsoft output format definitions
36///
37/// The supported streaming and non-streaming audio formats are sent in each
38/// request as the `X-Microsoft-OutputFormat` header. Each format incorporates a
39/// bit rate and encoding type. The Speech service supports 48-kHz, 24-kHz,
40/// 16-kHz, and 8-kHz audio outputs. Each prebuilt neural voice model is
41/// available at 24kHz and high-fidelity 48kHz.
42///
43/// If you select 48kHz output format, the high-fidelity voice model with 48kHz
44/// will be invoked accordingly. The sample rates other than 24kHz and 48kHz can
45/// be obtained through upsampling or downsampling when synthesizing, for
46/// example, 44.1kHz is downsampled from 48kHz.
47///
48/// If your selected voice and output format have different bit rates, the
49/// audio is resampled as necessary. You can decode the
50/// `ogg-24khz-16bit-mono-opus` format by using the Opus codec.
51///
52/// Source: <https://learn.microsoft.com/en-us/azure/cognitive-services/speech-service/rest-text-to-speech>
53#[allow(non_camel_case_types)]
54#[derive(Debug, Clone)]
55pub enum MicrosoftOutputFormat {
56    /// Streaming output format `amr-wb-16000hz`
57    Amr_Wb_16000hz,
58
59    /// Streaming output format `audio-16khz-16bit-32kbps-mono-opus`
60    Audio_16khz_16bit_32kbps_Mono_Opus,
61
62    /// Streaming output format `audio-16khz-32kbitrate-mono-mp3`
63    Audio_16khz_32kbitrate_Mono_Mp3,
64
65    /// Streaming output format `audio-16khz-64kbitrate-mono-mp3`
66    Audio_16khz_64kbitrate_Mono_Mp3,
67
68    /// Streaming output format `audio-16khz-128kbitrate-mono-mp3`
69    Audio_16khz_128kbitrate_Mono_Mp3,
70
71    /// Streaming output format `audio-24khz-16bit-24kbps-mono-opus`
72    Audio_24khz_16bit_24kbps_Mono_Opus,
73
74    /// Streaming output format `audio-24khz-16bit-48kbps-mono-opus`
75    Audio_24khz_16bit_48kbps_Mono_Opus,
76
77    /// Streaming output format `audio-24khz-48kbitrate-mono-mp3`
78    Audio_24khz_48kbitrate_Mono_Mp3,
79
80    /// Streaming output format `audio-24khz-96kbitrate-mono-mp3`
81    Audio_24khz_96kbitrate_Mono_Mp3,
82
83    /// Streaming output format `audio-24khz-160kbitrate-mono-mp3`
84    Audio_24khz_160kbitrate_Mono_Mp3,
85
86    /// Streaming output format `audio-48khz-96kbitrate-mono-mp3`
87    Audio_48khz_96kbitrate_Mono_Mp3,
88
89    /// Streaming output format `audio-48khz-192kbitrate-mono-mp3`
90    Audio_48khz_192kbitrate_Mono_Mp3,
91
92    /// Streaming output format `ogg-16khz-16bit-mono-opus`
93    Ogg_16khz_16bit_Mono_Opus,
94
95    /// Streaming output format `ogg-24khz-16bit-mono-opus`
96    Ogg_24khz_16bit_Mono_Opus,
97
98    /// Streaming output format `ogg-48khz-16bit-mono-opus`
99    Ogg_48khz_16bit_Mono_Opus,
100
101    /// Streaming output format `raw-8khz-8bit-mono-alaw`
102    Raw_8khz_8bit_Mono_Alaw,
103
104    /// Streaming output format `raw-8khz-8bit-mono-mulaw`
105    Raw_8khz_8bit_Mono_Mulaw,
106
107    /// Streaming output format `raw-8khz-16bit-mono-pcm`
108    Raw_8khz_16bit_Mono_Pcm,
109
110    /// Streaming output format `raw-16khz-16bit-mono-pcm`
111    Raw_16khz_16bit_Mono_Pcm,
112
113    /// Streaming output format `raw-16khz-16bit-mono-truesilk`
114    Raw_16khz_16bit_Mono_Truesilk,
115
116    /// Streaming output format `raw-22050hz-16bit-mono-pcm`
117    Raw_22050hz_16bit_Mono_Pcm,
118
119    /// Streaming output format `raw-24khz-16bit-mono-pcm`
120    Raw_24khz_16bit_Mono_Pcm,
121
122    /// Streaming output format `raw-24khz-16bit-mono-truesilk`
123    Raw_24khz_16bit_Mono_Truesilk,
124
125    /// Streaming output format `raw-44100hz-16bit-mono-pcm`
126    Raw_44100hz_16bit_Mono_Pcm,
127
128    /// Streaming output format `raw-48khz-16bit-mono-pcm`
129    Raw_48khz_16bit_Mono_Pcm,
130
131    /// Streaming output format `webm-16khz-16bit-mono-opus`
132    Webm_16khz_16bit_Mono_Opus,
133
134    /// Streaming output format `webm-24khz-16bit-24kbps-mono-opus`
135    Webm_24khz_16bit_24kbps_Mono_Opus,
136
137    /// Streaming output format `webm-24khz-16bit-mono-opus`
138    Webm_24khz_16bit_Mono_Opus,
139
140    /// Non-streaming output format `riff-8khz-8bit-mono-alaw`
141    Riff_8khz_8bit_Mono_Alaw,
142
143    /// Non-streaming output format `riff-8khz-8bit-mono-mulaw`
144    Riff_8khz_8bit_Mono_Mulaw,
145
146    /// Non-streaming output format `riff-8khz-16bit-mono-pcm`
147    Riff_8khz_16bit_Mono_Pcm,
148
149    /// Non-streaming output format `riff-22050hz-16bit-mono-pcm`
150    Riff_22050hz_16bit_Mono_Pcm,
151
152    /// Non-streaming output format `riff-24khz-16bit-mono-pcm`
153    Riff_24khz_16bit_Mono_Pcm,
154
155    /// Non-streaming output format `riff-44100hz-16bit-mono-pcm`
156    Riff_44100hz_16bit_Mono_Pcm,
157
158    /// Non-streaming output format `riff-48khz-16bit-mono-pcm`
159    Riff_48khz_16bit_Mono_Pcm,
160}
161
162impl Into<HeaderValue> for MicrosoftOutputFormat {
163    fn into(self) -> HeaderValue {
164        let s: String = self.into();
165        s.as_str().parse().unwrap()
166    }
167}
168
169impl Into<String> for MicrosoftOutputFormat {
170    fn into(self) -> String {
171        (match self {
172            Self::Amr_Wb_16000hz => "amr-wb-16000hz",
173            Self::Audio_16khz_16bit_32kbps_Mono_Opus => "audio-16khz-16bit-32kbps-mono-opus",
174            Self::Audio_16khz_32kbitrate_Mono_Mp3 => "audio-16khz-32kbitrate-mono-mp3",
175            Self::Audio_16khz_64kbitrate_Mono_Mp3 => "audio-16khz-64kbitrate-mono-mp3",
176            Self::Audio_16khz_128kbitrate_Mono_Mp3 => "audio-16khz-128kbitrate-mono-mp3",
177            Self::Audio_24khz_16bit_24kbps_Mono_Opus => "audio-24khz-16bit-24kbps-mono-opus",
178            Self::Audio_24khz_16bit_48kbps_Mono_Opus => "audio-24khz-16bit-48kbps-mono-opus",
179            Self::Audio_24khz_48kbitrate_Mono_Mp3 => "audio-24khz-48kbitrate-mono-mp3",
180            Self::Audio_24khz_96kbitrate_Mono_Mp3 => "audio-24khz-96kbitrate-mono-mp3",
181            Self::Audio_24khz_160kbitrate_Mono_Mp3 => "audio-24khz-160kbitrate-mono-mp3",
182            Self::Audio_48khz_96kbitrate_Mono_Mp3 => "audio-48khz-96kbitrate-mono-mp3",
183            Self::Audio_48khz_192kbitrate_Mono_Mp3 => "audio-48khz-192kbitrate-mono-mp3",
184            Self::Ogg_16khz_16bit_Mono_Opus => "ogg-16khz-16bit-mono-opus",
185            Self::Ogg_24khz_16bit_Mono_Opus => "ogg-24khz-16bit-mono-opus",
186            Self::Ogg_48khz_16bit_Mono_Opus => "ogg-48khz-16bit-mono-opus",
187            Self::Raw_8khz_8bit_Mono_Alaw => "raw-8khz-8bit-mono-alaw",
188            Self::Raw_8khz_8bit_Mono_Mulaw => "raw-8khz-8bit-mono-mulaw",
189            Self::Raw_8khz_16bit_Mono_Pcm => "raw-8khz-16bit-mono-pcm",
190            Self::Raw_16khz_16bit_Mono_Pcm => "raw-16khz-16bit-mono-pcm",
191            Self::Raw_16khz_16bit_Mono_Truesilk => "raw-16khz-16bit-mono-truesilk",
192            Self::Raw_22050hz_16bit_Mono_Pcm => "raw-22050hz-16bit-mono-pcm",
193            Self::Raw_24khz_16bit_Mono_Pcm => "raw-24khz-16bit-mono-pcm",
194            Self::Raw_24khz_16bit_Mono_Truesilk => "raw-24khz-16bit-mono-truesilk",
195            Self::Raw_44100hz_16bit_Mono_Pcm => "raw-44100hz-16bit-mono-pcm",
196            Self::Raw_48khz_16bit_Mono_Pcm => "raw-48khz-16bit-mono-pcm",
197            Self::Webm_16khz_16bit_Mono_Opus => "webm-16khz-16bit-mono-opus",
198            Self::Webm_24khz_16bit_24kbps_Mono_Opus => "webm-24khz-16bit-24kbps-mono-opus",
199            Self::Webm_24khz_16bit_Mono_Opus => "webm-24khz-16bit-mono-opus",
200
201            Self::Riff_8khz_8bit_Mono_Alaw => "riff-8khz-8bit-mono-alaw",
202            Self::Riff_8khz_8bit_Mono_Mulaw => "riff-8khz-8bit-mono-mulaw",
203            Self::Riff_8khz_16bit_Mono_Pcm => "riff-8khz-16bit-mono-pcm",
204            Self::Riff_22050hz_16bit_Mono_Pcm => "riff-22050hz-16bit-mono-pcm",
205            Self::Riff_24khz_16bit_Mono_Pcm => "riff-24khz-16bit-mono-pcm",
206            Self::Riff_44100hz_16bit_Mono_Pcm => "riff-44100hz-16bit-mono-pcm",
207            Self::Riff_48khz_16bit_Mono_Pcm => "riff-48khz-16bit-mono-pcm",
208        })
209        .into()
210    }
211}