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