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")]
16#[derive(gproxy_protocol_macros::WireBuilder)]
17#[non_exhaustive]
18pub struct CachedContent {
19    #[serde(default, skip_serializing_if = "Vec::is_empty")]
20    pub contents: Vec<Content>,
21    #[serde(default, skip_serializing_if = "Vec::is_empty")]
22    pub tools: Vec<Tool>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub create_time: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub update_time: Option<String>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub usage_metadata: Option<CachedContentUsageMetadata>,
29    #[serde(flatten, skip_serializing_if = "Option::is_none")]
30    pub expiration: Option<CachedContentExpiration>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub name: Option<String>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub display_name: Option<String>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub model: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub system_instruction: Option<Content>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub tool_config: Option<ToolConfig>,
41    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
42    pub extra: ExtraFields,
43}
44
45#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
46#[serde(untagged)]
47#[non_exhaustive]
48pub enum CachedContentExpiration {
49    ExpireTime {
50        #[serde(rename = "expireTime")]
51        expire_time: String,
52    },
53    Ttl {
54        ttl: String,
55    },
56}
57
58#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
59#[serde(rename_all = "camelCase")]
60#[derive(gproxy_protocol_macros::WireBuilder)]
61#[non_exhaustive]
62pub struct CachedContentUsageMetadata {
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub total_token_count: Option<i32>,
65    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
66    pub extra: ExtraFields,
67}
68
69#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
70#[serde(rename_all = "camelCase")]
71#[derive(gproxy_protocol_macros::WireBuilder)]
72#[non_exhaustive]
73pub struct ListCachedContentsRequest {
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub page_size: Option<i32>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub page_token: Option<String>,
78    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
79    pub extra: ExtraFields,
80}
81
82#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
83#[serde(rename_all = "camelCase")]
84#[derive(gproxy_protocol_macros::WireBuilder)]
85#[non_exhaustive]
86pub struct ListCachedContentsResponseBody {
87    #[serde(default, skip_serializing_if = "Vec::is_empty")]
88    pub cached_contents: Vec<CachedContent>,
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub next_page_token: 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")]
97#[derive(gproxy_protocol_macros::WireBuilder)]
98#[non_exhaustive]
99pub struct GetCachedContentRequest {
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub name: Option<String>,
102    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
103    pub extra: ExtraFields,
104}
105
106#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
107#[serde(rename_all = "camelCase")]
108#[derive(gproxy_protocol_macros::WireBuilder)]
109#[non_exhaustive]
110pub struct UpdateCachedContentQuery {
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub update_mask: Option<String>,
113    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
114    pub extra: ExtraFields,
115}
116
117#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
118#[serde(rename_all = "camelCase")]
119#[derive(gproxy_protocol_macros::WireBuilder)]
120#[non_exhaustive]
121pub struct DeleteCachedContentRequest {
122    #[serde(skip_serializing_if = "Option::is_none")]
123    pub name: Option<String>,
124    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
125    pub extra: ExtraFields,
126}