Skip to main content

gproxy_protocol/protocol/gemini/caching/
mod.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::common::{Content, ExtraFields, JsonMap, Tool, ToolConfig};
6
7pub type CreateCachedContentRequestBody = CachedContent;
8pub type CreateCachedContentResponseBody = CachedContent;
9pub type GetCachedContentResponseBody = CachedContent;
10pub type UpdateCachedContentRequestBody = CachedContent;
11pub type UpdateCachedContentResponseBody = CachedContent;
12pub type DeleteCachedContentResponseBody = JsonMap;
13
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
15#[serde(rename_all = "camelCase")]
16pub struct CachedContent {
17    #[serde(default, skip_serializing_if = "Vec::is_empty")]
18    pub contents: Vec<Content>,
19    #[serde(default, skip_serializing_if = "Vec::is_empty")]
20    pub tools: Vec<Tool>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub create_time: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub update_time: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub usage_metadata: Option<CachedContentUsageMetadata>,
27    #[serde(flatten, skip_serializing_if = "Option::is_none")]
28    pub expiration: Option<CachedContentExpiration>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub name: Option<String>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub display_name: Option<String>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub model: Option<String>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub system_instruction: Option<Content>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub tool_config: Option<ToolConfig>,
39    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
40    pub extra: ExtraFields,
41}
42
43#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
44#[serde(untagged)]
45pub enum CachedContentExpiration {
46    ExpireTime {
47        #[serde(rename = "expireTime")]
48        expire_time: String,
49    },
50    Ttl {
51        ttl: String,
52    },
53}
54
55#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
56#[serde(rename_all = "camelCase")]
57pub struct CachedContentUsageMetadata {
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub total_token_count: Option<i32>,
60    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
61    pub extra: ExtraFields,
62}
63
64#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
65#[serde(rename_all = "camelCase")]
66pub struct ListCachedContentsRequest {
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub page_size: Option<i32>,
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub page_token: Option<String>,
71    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
72    pub extra: ExtraFields,
73}
74
75#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
76#[serde(rename_all = "camelCase")]
77pub struct ListCachedContentsResponseBody {
78    #[serde(default, skip_serializing_if = "Vec::is_empty")]
79    pub cached_contents: Vec<CachedContent>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub next_page_token: Option<String>,
82    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
83    pub extra: ExtraFields,
84}
85
86#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
87#[serde(rename_all = "camelCase")]
88pub struct GetCachedContentRequest {
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub name: Option<String>,
91    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
92    pub extra: ExtraFields,
93}
94
95#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
96#[serde(rename_all = "camelCase")]
97pub struct UpdateCachedContentQuery {
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub update_mask: Option<String>,
100    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
101    pub extra: ExtraFields,
102}
103
104#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
105#[serde(rename_all = "camelCase")]
106pub struct DeleteCachedContentRequest {
107    #[serde(skip_serializing_if = "Option::is_none")]
108    pub name: Option<String>,
109    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
110    pub extra: ExtraFields,
111}