gproxy_protocol/protocol/gemini/
video.rs1use std::collections::BTreeMap;
5
6use serde::{Deserialize, Serialize};
7use serde_json::Value;
8
9use super::common::ExtraFields;
10
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
12#[serde(rename_all = "camelCase")]
13#[derive(gproxy_protocol_macros::WireBuilder)]
14#[non_exhaustive]
15pub struct VeoGenerateVideosRequest {
16 #[serde(default, skip_serializing_if = "Vec::is_empty")]
17 pub instances: Vec<VeoInstance>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub parameters: Option<VeoParameters>,
20 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
21 pub extra: ExtraFields,
22}
23
24#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
25#[serde(rename_all = "camelCase")]
26#[derive(gproxy_protocol_macros::WireBuilder)]
27#[non_exhaustive]
28pub struct VeoInstance {
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub prompt: Option<String>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub image: Option<VeoMedia>,
33 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
34 pub extra: ExtraFields,
35}
36
37#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
39#[serde(rename_all = "camelCase")]
40#[derive(gproxy_protocol_macros::WireBuilder)]
41#[non_exhaustive]
42pub struct VeoMedia {
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub bytes_base64_encoded: Option<String>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub gcs_uri: Option<String>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub mime_type: Option<String>,
49 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
50 pub extra: ExtraFields,
51}
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
54#[serde(rename_all = "camelCase")]
55#[derive(gproxy_protocol_macros::WireBuilder)]
56#[non_exhaustive]
57pub struct VeoParameters {
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub aspect_ratio: Option<String>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub duration_seconds: Option<u32>,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub negative_prompt: Option<String>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub number_of_videos: Option<u32>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub person_generation: Option<String>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub resolution: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub seed: Option<i64>,
72 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
73 pub extra: ExtraFields,
74}
75
76#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
79#[serde(rename_all = "camelCase")]
80#[derive(gproxy_protocol_macros::WireBuilder)]
81#[non_exhaustive]
82pub struct VeoOperation {
83 pub name: String,
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub metadata: Option<Value>,
86 #[serde(default)]
87 pub done: bool,
88 #[serde(skip_serializing_if = "Option::is_none")]
89 pub error: Option<VeoOperationError>,
90 #[serde(skip_serializing_if = "Option::is_none")]
91 pub response: Option<VeoOperationResponse>,
92 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
93 pub extra: ExtraFields,
94}
95
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
98#[serde(rename_all = "camelCase")]
99#[derive(gproxy_protocol_macros::WireBuilder)]
100#[non_exhaustive]
101pub struct VeoOperationError {
102 #[serde(skip_serializing_if = "Option::is_none")]
103 pub code: Option<i64>,
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub message: Option<String>,
106 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
107 pub extra: ExtraFields,
108}
109
110#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
111#[serde(rename_all = "camelCase")]
112#[derive(gproxy_protocol_macros::WireBuilder)]
113#[non_exhaustive]
114pub struct VeoOperationResponse {
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub generate_video_response: Option<VeoGenerateVideoResponse>,
117 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
118 pub extra: ExtraFields,
119}
120
121#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
122#[serde(rename_all = "camelCase")]
123#[derive(gproxy_protocol_macros::WireBuilder)]
124#[non_exhaustive]
125pub struct VeoGenerateVideoResponse {
126 #[serde(default, skip_serializing_if = "Vec::is_empty")]
128 pub generated_samples: Vec<VeoGeneratedSample>,
129 #[serde(default, skip_serializing_if = "Vec::is_empty")]
131 pub videos: Vec<VeoGeneratedVideo>,
132 #[serde(skip_serializing_if = "Option::is_none")]
133 pub rai_media_filtered_count: Option<u32>,
134 #[serde(default, skip_serializing_if = "Vec::is_empty")]
135 pub rai_media_filtered_reasons: Vec<String>,
136 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
137 pub extra: ExtraFields,
138}
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
141#[serde(rename_all = "camelCase")]
142#[derive(gproxy_protocol_macros::WireBuilder)]
143#[non_exhaustive]
144pub struct VeoGeneratedSample {
145 #[serde(skip_serializing_if = "Option::is_none")]
146 pub video: Option<VeoGeneratedVideo>,
147 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
148 pub extra: ExtraFields,
149}
150
151#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
152#[serde(rename_all = "camelCase")]
153#[derive(gproxy_protocol_macros::WireBuilder)]
154#[non_exhaustive]
155pub struct VeoGeneratedVideo {
156 #[serde(skip_serializing_if = "Option::is_none")]
158 pub uri: Option<String>,
159 #[serde(skip_serializing_if = "Option::is_none")]
160 pub bytes_base64_encoded: Option<String>,
161 #[serde(skip_serializing_if = "Option::is_none")]
162 pub gcs_uri: Option<String>,
163 #[serde(skip_serializing_if = "Option::is_none")]
164 pub mime_type: Option<String>,
165 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
166 pub extra: ExtraFields,
167}