use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize)]
pub struct BucketOptions {
pub public: bool,
pub file_size_limit: Option<u64>,
pub allowed_mime_types: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct BucketInfo {
pub id: String,
pub name: String,
#[serde(default)]
pub owner: Option<String>,
pub public: bool,
#[serde(default)]
pub file_size_limit: Option<u64>,
#[serde(default)]
pub allowed_mime_types: Option<Vec<String>>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FileOptions {
pub content_type: Option<String>,
pub cache_control: u32,
pub upsert: bool,
}
impl Default for FileOptions {
fn default() -> Self {
Self {
content_type: None,
cache_control: 3600,
upsert: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct ObjectKey {
#[serde(rename = "Key")]
pub key: String,
#[serde(rename = "Id", default)]
pub id: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize)]
pub struct ListOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<u32>,
#[serde(rename = "sortBy", skip_serializing_if = "Option::is_none")]
pub sort_by: Option<SortBy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub search: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub struct SortBy {
pub column: SortColumn,
pub order: SortOrder,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum SortColumn {
Name,
UpdatedAt,
CreatedAt,
LastAccessedAt,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum SortOrder {
Asc,
Desc,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct FileObject {
pub name: String,
#[serde(default)]
pub id: Option<String>,
#[serde(default)]
pub bucket_id: Option<String>,
#[serde(default)]
pub created_at: Option<DateTime<Utc>>,
#[serde(default)]
pub updated_at: Option<DateTime<Utc>>,
#[serde(default)]
pub last_accessed_at: Option<DateTime<Utc>>,
#[serde(default)]
pub metadata: Option<serde_json::Map<String, serde_json::Value>>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SignedUrl {
pub path: Option<String>,
pub url: Option<url::Url>,
pub error: Option<String>,
}