1use crate::{Rest, WireRequest, WireResponse};
8use serde::{Deserialize, Serialize};
9use serde_json::{Map, Value};
10
11#[derive(
13 Debug,
14 Clone,
15 PartialEq,
16 Serialize,
17 Deserialize,
18 gproxy_protocol_macros::WireBuilder,
19 gproxy_protocol_macros::DeclaredFields,
20)]
21#[serde(rename_all = "camelCase")]
22#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
23pub struct VideoImage {
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub bytes_base64_encoded: Option<String>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub mime_type: Option<String>,
28 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
29 pub rest: Rest,
30}
31
32#[derive(
34 Debug,
35 Clone,
36 PartialEq,
37 Serialize,
38 Deserialize,
39 gproxy_protocol_macros::WireBuilder,
40 gproxy_protocol_macros::DeclaredFields,
41)]
42#[serde(rename_all = "camelCase")]
43#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
44pub struct Video {
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub uri: Option<String>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub encoded_video: Option<String>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub encoding: Option<String>,
52 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
53 pub rest: Rest,
54}
55
56#[derive(
57 Debug,
58 Clone,
59 PartialEq,
60 Serialize,
61 Deserialize,
62 gproxy_protocol_macros::WireBuilder,
63 gproxy_protocol_macros::DeclaredFields,
64)]
65#[serde(rename_all = "camelCase")]
66#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
67pub struct VideoReferenceImage {
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub image: Option<VideoImage>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub reference_type: Option<VideoReferenceType>,
72 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
73 pub rest: Rest,
74}
75
76#[derive(
79 Debug,
80 Clone,
81 Copy,
82 PartialEq,
83 Eq,
84 Serialize,
85 Deserialize,
86 gproxy_protocol_macros::DeclaredFields,
87)]
88#[serde(rename_all = "UPPERCASE")]
89#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
90pub enum VideoReferenceType {
91 Asset,
92}
93
94#[derive(
95 Debug,
96 Clone,
97 PartialEq,
98 Serialize,
99 Deserialize,
100 gproxy_protocol_macros::WireBuilder,
101 gproxy_protocol_macros::DeclaredFields,
102)]
103#[serde(rename_all = "camelCase")]
104#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
105pub struct VideoGenerationInstance {
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub prompt: Option<String>,
108 #[serde(skip_serializing_if = "Option::is_none")]
109 pub image: Option<VideoImage>,
110 #[serde(skip_serializing_if = "Option::is_none")]
111 pub video: Option<Video>,
112 #[serde(skip_serializing_if = "Option::is_none")]
113 pub last_frame: Option<VideoImage>,
114 #[serde(skip_serializing_if = "Option::is_none")]
115 pub reference_images: Option<Vec<VideoReferenceImage>>,
116 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
117 pub rest: Rest,
118}
119
120#[derive(
121 Debug,
122 Clone,
123 PartialEq,
124 Serialize,
125 Deserialize,
126 gproxy_protocol_macros::WireBuilder,
127 gproxy_protocol_macros::DeclaredFields,
128)]
129#[serde(rename_all = "camelCase")]
130#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
131pub struct VideoGenerationParameters {
132 #[serde(skip_serializing_if = "Option::is_none")]
133 pub sample_count: Option<i32>,
134 #[serde(skip_serializing_if = "Option::is_none")]
135 pub duration_seconds: Option<i32>,
136 #[serde(skip_serializing_if = "Option::is_none")]
137 pub aspect_ratio: Option<String>,
138 #[serde(skip_serializing_if = "Option::is_none")]
139 pub resolution: Option<String>,
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub person_generation: Option<String>,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub negative_prompt: Option<String>,
144 #[serde(skip_serializing_if = "Option::is_none")]
145 pub enhance_prompt: Option<bool>,
146 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
147 pub rest: Rest,
148}
149
150#[derive(
151 Debug,
152 Clone,
153 PartialEq,
154 Serialize,
155 Deserialize,
156 gproxy_protocol_macros::WireBuilder,
157 gproxy_protocol_macros::DeclaredFields,
158)]
159#[serde(rename_all = "camelCase")]
160#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
161pub struct VideoWebhookConfig {
162 #[serde(skip_serializing_if = "Option::is_none")]
163 pub uris: Option<Vec<String>>,
164 #[serde(skip_serializing_if = "Option::is_none")]
165 #[serde(alias = "user_metadata")]
167 pub user_metadata: Option<Map<String, Value>>,
168 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
169 pub rest: Rest,
170}
171
172#[derive(
173 Debug,
174 Clone,
175 PartialEq,
176 Serialize,
177 Deserialize,
178 gproxy_protocol_macros::WireBuilder,
179 gproxy_protocol_macros::DeclaredFields,
180)]
181#[serde(rename_all = "camelCase")]
182#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
183pub struct PredictLongRunningRequestBody {
184 pub instances: Vec<VideoGenerationInstance>,
185 #[serde(skip_serializing_if = "Option::is_none")]
186 pub parameters: Option<VideoGenerationParameters>,
187 #[serde(skip_serializing_if = "Option::is_none")]
188 #[serde(alias = "webhook_config")]
189 pub webhook_config: Option<VideoWebhookConfig>,
190 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
191 pub rest: Rest,
192}
193
194pub type PredictLongRunningRequest = WireRequest<PredictLongRunningRequestBody>;
195pub type PredictLongRunningResponse = WireResponse<VideoOperation>;
196pub type FetchVideoOperationRequest = WireRequest<()>;
198pub type FetchVideoOperationResponse = WireResponse<VideoOperation>;
199
200#[derive(
201 Debug,
202 Clone,
203 PartialEq,
204 Serialize,
205 Deserialize,
206 gproxy_protocol_macros::WireBuilder,
207 gproxy_protocol_macros::DeclaredFields,
208)]
209#[serde(rename_all = "camelCase")]
210#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
211pub struct VideoOperation {
212 #[serde(skip_serializing_if = "Option::is_none")]
213 pub name: Option<String>,
214 #[serde(skip_serializing_if = "Option::is_none")]
215 pub metadata: Option<Map<String, Value>>,
217 #[serde(skip_serializing_if = "Option::is_none")]
218 pub done: Option<bool>,
219 #[serde(skip_serializing_if = "Option::is_none")]
220 pub error: Option<GoogleRpcStatus>,
221 #[serde(skip_serializing_if = "Option::is_none")]
222 pub response: Option<VideoOperationResponse>,
223 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
224 pub rest: Rest,
225}
226
227#[derive(
230 Debug,
231 Clone,
232 PartialEq,
233 Serialize,
234 Deserialize,
235 gproxy_protocol_macros::WireBuilder,
236 gproxy_protocol_macros::DeclaredFields,
237)]
238#[serde(rename_all = "camelCase")]
239#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
240pub struct VideoOperationResponse {
241 #[serde(skip_serializing_if = "Option::is_none")]
242 pub generate_video_response: Option<GenerateVideoResponse>,
243 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
244 pub rest: Rest,
245}
246
247#[derive(
248 Debug,
249 Clone,
250 PartialEq,
251 Serialize,
252 Deserialize,
253 gproxy_protocol_macros::WireBuilder,
254 gproxy_protocol_macros::DeclaredFields,
255)]
256#[serde(rename_all = "camelCase")]
257#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
258pub struct GoogleRpcStatus {
259 #[serde(skip_serializing_if = "Option::is_none")]
260 pub code: Option<i32>,
261 #[serde(skip_serializing_if = "Option::is_none")]
262 pub message: Option<String>,
263 #[serde(skip_serializing_if = "Option::is_none")]
264 pub details: Option<Vec<Map<String, Value>>>,
265 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
266 pub rest: Rest,
267}
268
269#[derive(
270 Debug,
271 Clone,
272 PartialEq,
273 Serialize,
274 Deserialize,
275 gproxy_protocol_macros::WireBuilder,
276 gproxy_protocol_macros::DeclaredFields,
277)]
278#[serde(rename_all = "camelCase")]
279#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
280pub struct GenerateVideoResponse {
281 #[serde(skip_serializing_if = "Option::is_none")]
282 pub generated_samples: Option<Vec<GeneratedVideoSample>>,
283 #[serde(skip_serializing_if = "Option::is_none")]
284 pub rai_media_filtered_count: Option<i32>,
285 #[serde(skip_serializing_if = "Option::is_none")]
286 pub rai_media_filtered_reasons: Option<Vec<String>>,
287 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
288 pub rest: Rest,
289}
290
291#[derive(
292 Debug,
293 Clone,
294 PartialEq,
295 Serialize,
296 Deserialize,
297 gproxy_protocol_macros::WireBuilder,
298 gproxy_protocol_macros::DeclaredFields,
299)]
300#[serde(rename_all = "camelCase")]
301#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
302pub struct GeneratedVideoSample {
303 #[serde(skip_serializing_if = "Option::is_none")]
304 pub video: Option<Video>,
305 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
306 pub rest: Rest,
307}