1use serde::{Deserialize, Serialize};
12use utoipa::OpenApi;
13
14
15use crate::models;
16
17#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize, OpenApi)]
18pub struct PlayHtVoice {
19 #[serde(rename = "provider")]
21 pub provider: Provider,
22 #[serde(rename = "voiceId")]
23 pub voice_id: models::PlayHtVoiceVoiceId,
24 #[serde(rename = "speed", skip_serializing_if = "Option::is_none")]
26 pub speed: Option<f64>,
27 #[serde(rename = "temperature", skip_serializing_if = "Option::is_none")]
29 pub temperature: Option<f64>,
30 #[serde(rename = "emotion", skip_serializing_if = "Option::is_none")]
32 pub emotion: Option<Emotion>,
33 #[serde(rename = "voiceGuidance", skip_serializing_if = "Option::is_none")]
35 pub voice_guidance: Option<f64>,
36 #[serde(rename = "styleGuidance", skip_serializing_if = "Option::is_none")]
38 pub style_guidance: Option<f64>,
39 #[serde(rename = "textGuidance", skip_serializing_if = "Option::is_none")]
41 pub text_guidance: Option<f64>,
42 #[serde(rename = "model", skip_serializing_if = "Option::is_none")]
44 pub model: Option<Model>,
45 #[serde(rename = "language", skip_serializing_if = "Option::is_none")]
47 pub language: Option<Language>,
48 #[serde(rename = "chunkPlan", skip_serializing_if = "Option::is_none")]
50 pub chunk_plan: Option<models::ChunkPlan>,
51 #[serde(rename = "fallbackPlan", skip_serializing_if = "Option::is_none")]
53 pub fallback_plan: Option<models::FallbackPlan>,
54}
55
56impl PlayHtVoice {
57 pub fn new(provider: Provider, voice_id: models::PlayHtVoiceVoiceId) -> PlayHtVoice {
58 PlayHtVoice {
59 provider,
60 voice_id,
61 speed: None,
62 temperature: None,
63 emotion: None,
64 voice_guidance: None,
65 style_guidance: None,
66 text_guidance: None,
67 model: None,
68 language: None,
69 chunk_plan: None,
70 fallback_plan: None,
71 }
72 }
73}
74#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize, OpenApi)]
76pub enum Provider {
77 #[serde(rename = "playht")]
78 Playht,
79}
80
81impl Default for Provider {
82 fn default() -> Provider {
83 Self::Playht
84 }
85}
86#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize, OpenApi)]
88pub enum Emotion {
89 #[serde(rename = "female_happy")]
90 FemaleHappy,
91 #[serde(rename = "female_sad")]
92 FemaleSad,
93 #[serde(rename = "female_angry")]
94 FemaleAngry,
95 #[serde(rename = "female_fearful")]
96 FemaleFearful,
97 #[serde(rename = "female_disgust")]
98 FemaleDisgust,
99 #[serde(rename = "female_surprised")]
100 FemaleSurprised,
101 #[serde(rename = "male_happy")]
102 MaleHappy,
103 #[serde(rename = "male_sad")]
104 MaleSad,
105 #[serde(rename = "male_angry")]
106 MaleAngry,
107 #[serde(rename = "male_fearful")]
108 MaleFearful,
109 #[serde(rename = "male_disgust")]
110 MaleDisgust,
111 #[serde(rename = "male_surprised")]
112 MaleSurprised,
113}
114
115impl Default for Emotion {
116 fn default() -> Emotion {
117 Self::FemaleHappy
118 }
119}
120#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize, OpenApi)]
122pub enum Model {
123 #[serde(rename = "PlayHT2.0")]
124 PlayHt2Period0,
125 #[serde(rename = "PlayHT2.0-turbo")]
126 PlayHt2Period0Turbo,
127 #[serde(rename = "Play3.0-mini")]
128 Play3Period0Mini,
129 #[serde(rename = "PlayDialog")]
130 PlayDialog,
131}
132
133impl Default for Model {
134 fn default() -> Model {
135 Self::PlayHt2Period0
136 }
137}
138#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize, OpenApi)]
140pub enum Language {
141 #[serde(rename = "afrikaans")]
142 Afrikaans,
143 #[serde(rename = "albanian")]
144 Albanian,
145 #[serde(rename = "amharic")]
146 Amharic,
147 #[serde(rename = "arabic")]
148 Arabic,
149 #[serde(rename = "bengali")]
150 Bengali,
151 #[serde(rename = "bulgarian")]
152 Bulgarian,
153 #[serde(rename = "catalan")]
154 Catalan,
155 #[serde(rename = "croatian")]
156 Croatian,
157 #[serde(rename = "czech")]
158 Czech,
159 #[serde(rename = "danish")]
160 Danish,
161 #[serde(rename = "dutch")]
162 Dutch,
163 #[serde(rename = "english")]
164 English,
165 #[serde(rename = "french")]
166 French,
167 #[serde(rename = "galician")]
168 Galician,
169 #[serde(rename = "german")]
170 German,
171 #[serde(rename = "greek")]
172 Greek,
173 #[serde(rename = "hebrew")]
174 Hebrew,
175 #[serde(rename = "hindi")]
176 Hindi,
177 #[serde(rename = "hungarian")]
178 Hungarian,
179 #[serde(rename = "indonesian")]
180 Indonesian,
181 #[serde(rename = "italian")]
182 Italian,
183 #[serde(rename = "japanese")]
184 Japanese,
185 #[serde(rename = "korean")]
186 Korean,
187 #[serde(rename = "malay")]
188 Malay,
189 #[serde(rename = "mandarin")]
190 Mandarin,
191 #[serde(rename = "polish")]
192 Polish,
193 #[serde(rename = "portuguese")]
194 Portuguese,
195 #[serde(rename = "russian")]
196 Russian,
197 #[serde(rename = "serbian")]
198 Serbian,
199 #[serde(rename = "spanish")]
200 Spanish,
201 #[serde(rename = "swedish")]
202 Swedish,
203 #[serde(rename = "tagalog")]
204 Tagalog,
205 #[serde(rename = "thai")]
206 Thai,
207 #[serde(rename = "turkish")]
208 Turkish,
209 #[serde(rename = "ukrainian")]
210 Ukrainian,
211 #[serde(rename = "urdu")]
212 Urdu,
213 #[serde(rename = "xhosa")]
214 Xhosa,
215}
216
217impl Default for Language {
218 fn default() -> Language {
219 Self::Afrikaans
220 }
221}