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