use reqwest::Url;
use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
use crate::common::serde::*;
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct File {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub uri: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub download_uri: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mime_type: Option<String>,
#[serde(default, with = "i64_as_string::optional")]
#[serde(skip_serializing_if = "Option::is_none")]
pub size_bytes: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default, with = "time::serde::rfc3339::option")]
pub create_time: Option<OffsetDateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default, with = "time::serde::rfc3339::option")]
pub expiration_time: Option<OffsetDateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default, with = "time::serde::rfc3339::option")]
pub update_time: Option<OffsetDateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sha256_hash: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state: Option<FileState>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum FileState {
StateUnspecified,
Processing,
Active,
Failed,
Deleted,
}
#[derive(Debug, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ListFilesResponse {
#[serde(default)]
pub files: Vec<File>,
pub next_page_token: Option<String>,
}