adk_gemini/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")]
71 expire_time: OffsetDateTime,
72 },
73 Ttl {
77 ttl: String,
79 },
80}
81
82impl CacheExpirationRequest {
83 pub fn from_ttl(duration: std::time::Duration) -> Self {
85 Self::Ttl { ttl: format!("{}s", duration.as_secs()) }
86 }
87
88 pub fn from_expire_time(expire_time: OffsetDateTime) -> Self {
90 Self::ExpireTime { expire_time }
91 }
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
96#[serde(rename_all = "camelCase")]
97pub struct CacheExpirationResponse {
98 #[serde(skip_serializing_if = "Option::is_none")]
101 #[serde(default, with = "time::serde::rfc3339::option")]
102 pub expire_time: Option<OffsetDateTime>,
103 #[serde(skip_serializing_if = "Option::is_none")]
105 pub ttl: Option<String>,
106}
107
108#[derive(Debug, Clone, Serialize, PartialEq)]
110#[serde(rename_all = "camelCase")]
111pub struct CreateCachedContentRequest {
112 #[serde(skip_serializing_if = "Option::is_none")]
115 pub display_name: Option<String>,
116
117 pub model: Model,
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)]
143#[serde(rename_all = "camelCase")]
144pub struct CachedContentSummary {
145 pub name: String,
147
148 pub model: Model,
150
151 #[serde(with = "time::serde::rfc3339")]
153 pub create_time: OffsetDateTime,
154
155 #[serde(with = "time::serde::rfc3339")]
157 pub update_time: OffsetDateTime,
158
159 pub usage_metadata: CacheUsageMetadata,
161
162 #[serde(flatten)]
164 pub expiration: CacheExpirationResponse,
165
166 #[serde(skip_serializing_if = "Option::is_none")]
168 pub display_name: Option<String>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
173#[serde(rename_all = "camelCase")]
174pub struct ListCachedContentsResponse {
175 #[serde(default)]
177 pub cached_contents: Vec<CachedContentSummary>,
178 #[serde(skip_serializing_if = "Option::is_none")]
180 pub next_page_token: Option<String>,
181}