Skip to main content

gproxy_protocol/protocol/gemini/common/
speech.rs

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