gemini_rust/cache/
model.rs1use serde::{Deserialize, Serialize};
2use time::OffsetDateTime;
3
4use crate::models::Content;
5use crate::{Model, 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: Model,
17
18 #[serde(with = "time::serde::rfc3339")]
20 pub create_time: OffsetDateTime,
21
22 #[serde(with = "time::serde::rfc3339")]
24 pub update_time: OffsetDateTime,
25
26 pub usage_metadata: CacheUsageMetadata,
28
29 #[serde(flatten)]
31 pub expiration: CacheExpirationResponse,
32
33 #[serde(skip_serializing_if = "Option::is_none")]
35 pub display_name: Option<String>,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub contents: Option<Vec<Content>>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub tools: Option<Vec<Tool>>,
44
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub system_instruction: Option<Content>,
48
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub tool_config: Option<ToolConfig>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
56#[serde(rename_all = "camelCase")]
57pub struct CacheUsageMetadata {
58 pub total_token_count: i32,
60}
61
62#[derive(Debug, Clone, Serialize, PartialEq)]
64#[serde(untagged)]
65pub enum CacheExpirationRequest {
66 ExpireTime {
69 #[serde(with = "time::serde::rfc3339")]
70 expire_time: OffsetDateTime,
71 },
72 Ttl { ttl: String },
76}
77
78impl CacheExpirationRequest {
79 pub fn from_ttl(duration: std::time::Duration) -> Self {
81 Self::Ttl {
82 ttl: format!("{}s", duration.as_secs()),
83 }
84 }
85
86 pub fn from_expire_time(expire_time: OffsetDateTime) -> Self {
88 Self::ExpireTime { expire_time }
89 }
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
94#[serde(rename_all = "camelCase")]
95pub struct CacheExpirationResponse {
96 #[serde(skip_serializing_if = "Option::is_none")]
99 #[serde(default, with = "time::serde::rfc3339::option")]
100 pub expire_time: Option<OffsetDateTime>,
101 #[serde(skip_serializing_if = "Option::is_none")]
103 pub ttl: Option<String>,
104}
105
106#[derive(Debug, Clone, Serialize, PartialEq)]
108#[serde(rename_all = "camelCase")]
109pub struct CreateCachedContentRequest {
110 #[serde(skip_serializing_if = "Option::is_none")]
113 pub display_name: Option<String>,
114
115 pub model: Model,
117
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub contents: Option<Vec<Content>>,
121
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub tools: Option<Vec<Tool>>,
125
126 #[serde(skip_serializing_if = "Option::is_none")]
128 pub system_instruction: Option<Content>,
129
130 #[serde(skip_serializing_if = "Option::is_none")]
132 pub tool_config: Option<ToolConfig>,
133
134 #[serde(flatten)]
136 pub expiration: CacheExpirationRequest,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
141#[serde(rename_all = "camelCase")]
142pub struct CachedContentSummary {
143 pub name: String,
145
146 pub model: Model,
148
149 #[serde(with = "time::serde::rfc3339")]
151 pub create_time: OffsetDateTime,
152
153 #[serde(with = "time::serde::rfc3339")]
155 pub update_time: OffsetDateTime,
156
157 pub usage_metadata: CacheUsageMetadata,
159
160 #[serde(flatten)]
162 pub expiration: CacheExpirationResponse,
163
164 #[serde(skip_serializing_if = "Option::is_none")]
166 pub display_name: Option<String>,
167}
168
169#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
171#[serde(rename_all = "camelCase")]
172pub struct ListCachedContentsResponse {
173 #[serde(default)]
175 pub cached_contents: Vec<CachedContentSummary>,
176 #[serde(skip_serializing_if = "Option::is_none")]
178 pub next_page_token: Option<String>,
179}