gemini_rust/cache/
model.rs1use serde::{Deserialize, Serialize};
2use time::OffsetDateTime;
3
4use crate::models::Content;
5use crate::{Tool, ToolConfig};
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
9#[serde(rename_all = "camelCase")]
10pub struct CachedContent {
11 pub name: String,
14
15 pub model: String,
18
19 #[serde(with = "time::serde::rfc3339")]
21 pub create_time: OffsetDateTime,
22
23 #[serde(with = "time::serde::rfc3339")]
25 pub update_time: OffsetDateTime,
26
27 pub usage_metadata: CacheUsageMetadata,
29
30 #[serde(flatten)]
32 pub expiration: CacheExpirationResponse,
33
34 #[serde(skip_serializing_if = "Option::is_none")]
36 pub display_name: Option<String>,
37
38 #[serde(skip_serializing_if = "Option::is_none")]
40 pub contents: Option<Vec<Content>>,
41
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub tools: Option<Vec<Tool>>,
45
46 #[serde(skip_serializing_if = "Option::is_none")]
48 pub system_instruction: Option<Content>,
49
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub tool_config: Option<ToolConfig>,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
57#[serde(rename_all = "camelCase")]
58pub struct CacheUsageMetadata {
59 pub total_token_count: i32,
61}
62
63#[derive(Debug, Clone, Serialize, PartialEq)]
65#[serde(untagged)]
66pub enum CacheExpirationRequest {
67 ExpireTime {
70 #[serde(with = "time::serde::rfc3339")]
71 expire_time: OffsetDateTime,
72 },
73 Ttl { ttl: String },
77}
78
79impl CacheExpirationRequest {
80 pub fn from_ttl(duration: std::time::Duration) -> Self {
82 Self::Ttl {
83 ttl: format!("{}s", duration.as_secs()),
84 }
85 }
86
87 pub fn from_expire_time(expire_time: OffsetDateTime) -> Self {
89 Self::ExpireTime { expire_time }
90 }
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
95#[serde(rename_all = "camelCase")]
96pub struct CacheExpirationResponse {
97 #[serde(skip_serializing_if = "Option::is_none")]
100 #[serde(default, with = "time::serde::rfc3339::option")]
101 pub expire_time: Option<OffsetDateTime>,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub ttl: Option<String>,
105}
106
107#[derive(Debug, Clone, Serialize, PartialEq)]
109#[serde(rename_all = "camelCase")]
110pub struct CreateCachedContentRequest {
111 #[serde(skip_serializing_if = "Option::is_none")]
114 pub display_name: Option<String>,
115
116 pub model: String,
119
120 #[serde(skip_serializing_if = "Option::is_none")]
122 pub contents: Option<Vec<Content>>,
123
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub tools: Option<Vec<Tool>>,
127
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub system_instruction: Option<Content>,
131
132 #[serde(skip_serializing_if = "Option::is_none")]
134 pub tool_config: Option<ToolConfig>,
135
136 #[serde(flatten)]
138 pub expiration: CacheExpirationRequest,
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
143pub struct DeleteCachedContentResponse {
144 #[serde(skip_serializing_if = "Option::is_none")]
146 pub success: Option<bool>,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
151#[serde(rename_all = "camelCase")]
152pub struct CachedContentSummary {
153 pub name: String,
155
156 pub model: String,
158
159 #[serde(with = "time::serde::rfc3339")]
161 pub create_time: OffsetDateTime,
162
163 #[serde(with = "time::serde::rfc3339")]
165 pub update_time: OffsetDateTime,
166
167 pub usage_metadata: CacheUsageMetadata,
169
170 #[serde(flatten)]
172 pub expiration: CacheExpirationResponse,
173
174 #[serde(skip_serializing_if = "Option::is_none")]
176 pub display_name: Option<String>,
177}
178
179#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
181#[serde(rename_all = "camelCase")]
182pub struct ListCachedContentsResponse {
183 #[serde(default)]
185 pub cached_contents: Vec<CachedContentSummary>,
186 #[serde(skip_serializing_if = "Option::is_none")]
188 pub next_page_token: Option<String>,
189}