gproxy_protocol/gemini/count_tokens/
response.rs1use http::StatusCode;
2use serde::{Deserialize, Serialize};
3
4use crate::gemini::count_tokens::types::GeminiModalityTokenCount;
5use crate::gemini::types::{GeminiApiErrorResponse, GeminiResponseHeaders};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9pub struct ResponseBody {
10 #[serde(rename = "totalTokens")]
12 pub total_tokens: u64,
13 #[serde(
15 rename = "cachedContentTokenCount",
16 default,
17 skip_serializing_if = "Option::is_none"
18 )]
19 pub cached_content_token_count: Option<u64>,
20 #[serde(
22 rename = "promptTokensDetails",
23 default,
24 skip_serializing_if = "Option::is_none"
25 )]
26 pub prompt_tokens_details: Option<Vec<GeminiModalityTokenCount>>,
27 #[serde(
29 rename = "cacheTokensDetails",
30 default,
31 skip_serializing_if = "Option::is_none"
32 )]
33 pub cache_tokens_details: Option<Vec<GeminiModalityTokenCount>>,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
38#[serde(untagged)]
39pub enum GeminiCountTokensResponse {
40 Success {
41 #[serde(with = "crate::gemini::types::status_code_serde")]
43 stats_code: StatusCode,
44 headers: GeminiResponseHeaders,
46 body: ResponseBody,
48 },
49 Error {
50 #[serde(with = "crate::gemini::types::status_code_serde")]
52 stats_code: StatusCode,
53 headers: GeminiResponseHeaders,
55 body: GeminiApiErrorResponse,
57 },
58}