gproxy_protocol/protocol/gemini/caching/
mod.rs1use 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}