gproxy_protocol/gemini/common/
speech.rs1use serde::{Deserialize, Serialize};
2
3use super::SpeechLanguageCode;
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
6#[serde(rename_all = "camelCase")]
7#[derive(gproxy_protocol_macros::WireBuilder)]
8#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
9pub struct SpeechConfig {
10 #[serde(flatten, skip_serializing_if = "Option::is_none")]
11 pub voice: Option<SpeechVoiceConfig>,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub language_code: Option<SpeechLanguageCode>,
14 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
15 pub rest: serde_json::Map<String, serde_json::Value>,
16}
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
19#[serde(untagged)]
20#[non_exhaustive]
21pub enum SpeechVoiceConfig {
22 VoiceConfig {
23 #[serde(rename = "voiceConfig")]
24 voice_config: VoiceConfig,
25 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
26 rest: serde_json::Map<String, serde_json::Value>,
27 },
28 MultiSpeakerVoiceConfig {
29 #[serde(rename = "multiSpeakerVoiceConfig")]
30 multi_speaker_voice_config: MultiSpeakerVoiceConfig,
31 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
32 rest: serde_json::Map<String, serde_json::Value>,
33 },
34 Raw(serde_json::Value),
35}
36
37#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
38#[serde(rename_all = "camelCase")]
39#[derive(gproxy_protocol_macros::WireBuilder)]
40#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
41pub struct VoiceConfig {
42 #[serde(flatten, skip_serializing_if = "Option::is_none")]
43 pub voice_config: Option<VoiceConfigValue>,
44 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
45 pub rest: serde_json::Map<String, serde_json::Value>,
46}
47
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49#[serde(untagged)]
50#[non_exhaustive]
51pub enum VoiceConfigValue {
52 PrebuiltVoiceConfig {
53 #[serde(rename = "prebuiltVoiceConfig")]
54 prebuilt_voice_config: PrebuiltVoiceConfig,
55 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
56 rest: serde_json::Map<String, serde_json::Value>,
57 },
58 Raw(serde_json::Value),
59}
60
61#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
62#[serde(rename_all = "camelCase")]
63#[derive(gproxy_protocol_macros::WireBuilder)]
64#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
65pub struct PrebuiltVoiceConfig {
66 pub voice_name: String,
67 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
68 pub rest: serde_json::Map<String, serde_json::Value>,
69}
70
71#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
72#[serde(rename_all = "camelCase")]
73#[derive(gproxy_protocol_macros::WireBuilder)]
74#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
75pub struct MultiSpeakerVoiceConfig {
76 pub speaker_voice_configs: Vec<SpeakerVoiceConfig>,
77 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
78 pub rest: serde_json::Map<String, serde_json::Value>,
79}
80
81#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
82#[serde(rename_all = "camelCase")]
83#[derive(gproxy_protocol_macros::WireBuilder)]
84#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
85pub struct SpeakerVoiceConfig {
86 pub speaker: String,
87 pub voice_config: VoiceConfig,
88 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
89 pub rest: serde_json::Map<String, serde_json::Value>,
90}