gproxy_protocol/gemini/live/
request.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::gemini::live::types::{GeminiBidiGenerateContentClientMessage, HttpMethod};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9pub struct GeminiLiveConnectRequest {
10 pub method: HttpMethod,
12 pub path: PathParameters,
14 pub query: QueryParameters,
16 pub headers: RequestHeaders,
18 #[serde(default, skip_serializing_if = "Option::is_none")]
20 pub body: Option<RequestBody>,
21}
22
23impl Default for GeminiLiveConnectRequest {
24 fn default() -> Self {
25 Self {
26 method: HttpMethod::Get,
27 path: PathParameters::default(),
28 query: QueryParameters::default(),
29 headers: RequestHeaders::default(),
30 body: None,
31 }
32 }
33}
34
35#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
36pub struct PathParameters {
37 #[serde(default)]
41 pub rpc: GeminiLiveRpcMethod,
42}
43
44#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
45pub enum GeminiLiveRpcMethod {
46 #[default]
47 #[serde(rename = "google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent")]
48 BidiGenerateContent,
49 #[serde(
50 rename = "google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContentConstrained"
51 )]
52 BidiGenerateContentConstrained,
53}
54
55#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
56pub struct QueryParameters {
57 #[serde(default, skip_serializing_if = "Option::is_none")]
59 pub key: Option<String>,
60 #[serde(
62 rename = "access_token",
63 default,
64 skip_serializing_if = "Option::is_none"
65 )]
66 pub access_token: Option<String>,
67}
68
69#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
70pub struct RequestHeaders {
71 #[serde(
73 rename = "Authorization",
74 default,
75 skip_serializing_if = "Option::is_none"
76 )]
77 pub authorization: Option<String>,
78 #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
79 pub extra: BTreeMap<String, String>,
80}
81
82pub type RequestBody = GeminiBidiGenerateContentClientMessage;