gemini_rust/files/
model.rs1use reqwest::Url;
2use serde::{Deserialize, Serialize};
3use time::OffsetDateTime;
4
5use crate::common::serde::*;
6
7#[derive(Debug, Default, Clone, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10pub struct File {
11 pub name: String,
13 #[serde(skip_serializing_if = "Option::is_none")]
15 pub uri: Option<Url>,
16 #[serde(skip_serializing_if = "Option::is_none")]
18 pub download_uri: Option<Url>,
19 #[serde(skip_serializing_if = "Option::is_none")]
21 pub display_name: Option<String>,
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub mime_type: Option<String>,
25 #[serde(default, with = "i64_as_string::optional")]
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub size_bytes: Option<i64>,
29 #[serde(skip_serializing_if = "Option::is_none")]
31 #[serde(default, with = "time::serde::rfc3339::option")]
32 pub create_time: Option<OffsetDateTime>,
33 #[serde(skip_serializing_if = "Option::is_none")]
35 #[serde(default, with = "time::serde::rfc3339::option")]
36 pub expiration_time: Option<OffsetDateTime>,
37 #[serde(skip_serializing_if = "Option::is_none")]
39 #[serde(default, with = "time::serde::rfc3339::option")]
40 pub update_time: Option<OffsetDateTime>,
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub sha256_hash: Option<String>,
44 #[serde(skip_serializing_if = "Option::is_none")]
46 pub state: Option<FileState>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
51#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
52pub enum FileState {
53 StateUnspecified,
55 Processing,
57 Active,
59 Failed,
61 Deleted,
63}
64
65#[derive(Debug, serde::Deserialize)]
67#[serde(rename_all = "camelCase")]
68pub struct ListFilesResponse {
69 #[serde(default)]
71 pub files: Vec<File>,
72 pub next_page_token: Option<String>,
74}