use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize)]
pub struct ApiResponse<T> {
pub code: i32,
pub message: String,
pub data: Option<T>,
}
impl<T> ApiResponse<T> {
pub fn is_success(&self) -> bool {
self.code == 0
}
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AccessTokenRequest {
pub client_id: String,
pub client_secret: String,
}
#[derive(Debug, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct AccessTokenData {
pub access_token: String,
pub expired_at: String,
}
#[derive(Debug, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct FileInfo {
pub file_id: i64,
pub filename: String,
#[serde(rename = "type")]
pub file_type: i32, pub size: i64,
#[allow(dead_code)]
pub parent_file_id: i64,
#[serde(default)]
pub trashed: i32, }
impl FileInfo {
pub fn is_folder(&self) -> bool {
self.file_type == 1
}
pub fn is_trashed(&self) -> bool {
self.trashed == 1
}
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FileListData {
pub last_file_id: i64,
pub file_list: Vec<FileInfo>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateDirRequest {
pub name: String,
#[serde(rename = "parentID")]
pub parent_id: i64,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateDirData {
#[serde(rename = "dirID")]
pub dir_id: i64,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DownloadInfoData {
pub download_url: String,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TrashRequest {
#[serde(rename = "fileIDs")]
pub file_ids: Vec<i64>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DeleteRequest {
#[serde(rename = "fileIDs")]
pub file_ids: Vec<i64>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MoveRequest {
#[serde(rename = "fileIDs")]
pub file_ids: Vec<i64>,
#[serde(rename = "toParentFileID")]
pub to_parent_file_id: i64,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SingleUploadData {
#[serde(rename = "fileID")]
pub file_id: i64,
pub completed: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ResticFileType {
Config,
Data,
Keys,
Locks,
Snapshots,
Index,
}
impl ResticFileType {
pub fn dirname(&self) -> &'static str {
match self {
ResticFileType::Config => "config",
ResticFileType::Data => "data",
ResticFileType::Keys => "keys",
ResticFileType::Locks => "locks",
ResticFileType::Snapshots => "snapshots",
ResticFileType::Index => "index",
}
}
pub fn from_str(s: &str) -> Option<Self> {
match s {
"config" => Some(ResticFileType::Config),
"data" => Some(ResticFileType::Data),
"keys" => Some(ResticFileType::Keys),
"locks" => Some(ResticFileType::Locks),
"snapshots" => Some(ResticFileType::Snapshots),
"index" => Some(ResticFileType::Index),
_ => None,
}
}
pub fn is_config(&self) -> bool {
matches!(self, ResticFileType::Config)
}
}