Skip to main content

gproxy_protocol/gemini/stream_generate_content/
request.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::gemini::types::HttpMethod;
6
7/// Request descriptor for Gemini `models.streamGenerateContent` endpoint.
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9pub struct GeminiStreamGenerateContentRequest {
10    /// HTTP method.
11    pub method: HttpMethod,
12    /// Path parameters.
13    pub path: PathParameters,
14    /// Query parameters.
15    pub query: QueryParameters,
16    /// Request headers.
17    pub headers: RequestHeaders,
18    /// Request body.
19    pub body: RequestBody,
20}
21
22impl Default for GeminiStreamGenerateContentRequest {
23    fn default() -> Self {
24        Self {
25            method: HttpMethod::Post,
26            path: PathParameters::default(),
27            query: QueryParameters::default(),
28            headers: RequestHeaders::default(),
29            body: RequestBody::default(),
30        }
31    }
32}
33
34#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
35pub struct PathParameters {
36    /// Resource name in form `models/{model}`.
37    pub model: String,
38}
39
40#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
41pub struct QueryParameters {
42    /// Optional response transport selector.
43    ///
44    /// When omitted, server uses newline-delimited JSON (NDJSON).
45    /// Set `alt=sse` to request Server-Sent Events.
46    #[serde(default, skip_serializing_if = "Option::is_none")]
47    pub alt: Option<AltQueryParameter>,
48}
49
50#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
51pub enum AltQueryParameter {
52    #[serde(rename = "sse")]
53    Sse,
54}
55
56/// Proxy-side request model does not carry auth headers.
57#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
58pub struct RequestHeaders {
59    #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
60    pub extra: BTreeMap<String, String>,
61}
62
63/// Stream endpoint shares the same JSON body as `models.generateContent`.
64pub type RequestBody = crate::gemini::generate_content::request::RequestBody;