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