1use serde::{Deserialize, Serialize};
12use utoipa::ToSchema;
13
14
15use crate::models;
16
17#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize, ToSchema)]
18pub struct VoiceLibrary {
19 #[serde(rename = "provider", skip_serializing_if = "Option::is_none")]
21 pub provider: Option<Provider>,
22 #[serde(rename = "providerId", skip_serializing_if = "Option::is_none")]
24 pub provider_id: Option<String>,
25 #[serde(rename = "slug", skip_serializing_if = "Option::is_none")]
27 pub slug: Option<String>,
28 #[serde(rename = "name", skip_serializing_if = "Option::is_none")]
30 pub name: Option<String>,
31 #[serde(rename = "language", skip_serializing_if = "Option::is_none")]
33 pub language: Option<String>,
34 #[serde(rename = "languageCode", skip_serializing_if = "Option::is_none")]
36 pub language_code: Option<String>,
37 #[serde(rename = "model", skip_serializing_if = "Option::is_none")]
39 pub model: Option<String>,
40 #[serde(rename = "supportedModels", skip_serializing_if = "Option::is_none")]
42 pub supported_models: Option<String>,
43 #[serde(rename = "gender", skip_serializing_if = "Option::is_none")]
45 pub gender: Option<Gender>,
46 #[serde(rename = "accent", skip_serializing_if = "Option::is_none")]
48 pub accent: Option<String>,
49 #[serde(rename = "previewUrl", skip_serializing_if = "Option::is_none")]
51 pub preview_url: Option<String>,
52 #[serde(rename = "description", skip_serializing_if = "Option::is_none")]
54 pub description: Option<String>,
55 #[serde(rename = "credentialId", skip_serializing_if = "Option::is_none")]
57 pub credential_id: Option<String>,
58 #[serde(rename = "id")]
60 pub id: String,
61 #[serde(rename = "orgId")]
63 pub org_id: String,
64 #[serde(rename = "isPublic")]
66 pub is_public: bool,
67 #[serde(rename = "isDeleted")]
69 pub is_deleted: bool,
70 #[serde(rename = "createdAt")]
72 pub created_at: String,
73 #[serde(rename = "updatedAt")]
75 pub updated_at: String,
76}
77
78impl VoiceLibrary {
79 pub fn new(
80 id: String,
81 org_id: String,
82 is_public: bool,
83 is_deleted: bool,
84 created_at: String,
85 updated_at: String,
86 ) -> VoiceLibrary {
87 VoiceLibrary {
88 provider: None,
89 provider_id: None,
90 slug: None,
91 name: None,
92 language: None,
93 language_code: None,
94 model: None,
95 supported_models: None,
96 gender: None,
97 accent: None,
98 preview_url: None,
99 description: None,
100 credential_id: None,
101 id,
102 org_id,
103 is_public,
104 is_deleted,
105 created_at,
106 updated_at,
107 }
108 }
109}
110#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize, ToSchema)]
112pub enum Provider {
113 #[serde(rename = "vapi")]
114 Vapi,
115 #[serde(rename = "11labs")]
116 Variant11labs,
117 #[serde(rename = "azure")]
118 Azure,
119 #[serde(rename = "cartesia")]
120 Cartesia,
121 #[serde(rename = "custom-voice")]
122 CustomVoice,
123 #[serde(rename = "deepgram")]
124 Deepgram,
125 #[serde(rename = "hume")]
126 Hume,
127 #[serde(rename = "lmnt")]
128 Lmnt,
129 #[serde(rename = "neets")]
130 Neets,
131 #[serde(rename = "neuphonic")]
132 Neuphonic,
133 #[serde(rename = "openai")]
134 Openai,
135 #[serde(rename = "playht")]
136 Playht,
137 #[serde(rename = "rime-ai")]
138 RimeAi,
139 #[serde(rename = "smallest-ai")]
140 SmallestAi,
141 #[serde(rename = "tavus")]
142 Tavus,
143}
144
145impl Default for Provider {
146 fn default() -> Provider {
147 Self::Vapi
148 }
149}
150#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize, ToSchema)]
152pub enum Gender {
153 #[serde(rename = "male")]
154 Male,
155 #[serde(rename = "female")]
156 Female,
157}
158
159impl Default for Gender {
160 fn default() -> Gender {
161 Self::Male
162 }
163}