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")]
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 { ttl: format!("{}s", duration.as_secs()) }
82 }
83
84 pub fn from_expire_time(expire_time: OffsetDateTime) -> Self {
86 Self::ExpireTime { expire_time }
87 }
88}
89
90#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
92#[serde(rename_all = "camelCase")]
93pub struct CacheExpirationResponse {
94 #[serde(skip_serializing_if = "Option::is_none")]
97 #[serde(default, with = "time::serde::rfc3339::option")]
98 pub expire_time: Option<OffsetDateTime>,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub ttl: Option<String>,
102}
103
104#[derive(Debug, Clone, Serialize, PartialEq)]
106#[serde(rename_all = "camelCase")]
107pub struct CreateCachedContentRequest {
108 #[serde(skip_serializing_if = "Option::is_none")]
111 pub display_name: Option<String>,
112
113 pub model: Model,
115
116 #[serde(skip_serializing_if = "Option::is_none")]
118 pub contents: Option<Vec<Content>>,
119
120 #[serde(skip_serializing_if = "Option::is_none")]
122 pub tools: Option<Vec<Tool>>,
123
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub system_instruction: Option<Content>,
127
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub tool_config: Option<ToolConfig>,
131
132 #[serde(flatten)]
134 pub expiration: CacheExpirationRequest,
135}
136
137#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
139#[serde(rename_all = "camelCase")]
140pub struct CachedContentSummary {
141 pub name: String,
143
144 pub model: Model,
146
147 #[serde(with = "time::serde::rfc3339")]
149 pub create_time: OffsetDateTime,
150
151 #[serde(with = "time::serde::rfc3339")]
153 pub update_time: OffsetDateTime,
154
155 pub usage_metadata: CacheUsageMetadata,
157
158 #[serde(flatten)]
160 pub expiration: CacheExpirationResponse,
161
162 #[serde(skip_serializing_if = "Option::is_none")]
164 pub display_name: Option<String>,
165}
166
167#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
169#[serde(rename_all = "camelCase")]
170pub struct ListCachedContentsResponse {
171 #[serde(default)]
173 pub cached_contents: Vec<CachedContentSummary>,
174 #[serde(skip_serializing_if = "Option::is_none")]
176 pub next_page_token: Option<String>,
177}