Skip to main content

gproxy_protocol/gemini/common/
speech.rs

1use 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}