use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum FolderType {
Home,
Share,
}
impl FolderType {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Home => "home",
Self::Share => "share",
}
}
}
impl std::fmt::Display for FolderType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
impl std::str::FromStr for FolderType {
type Err = crate::error::UgosError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_ascii_lowercase().as_str() {
"home" => Ok(Self::Home),
"share" => Ok(Self::Share),
other => Err(crate::error::UgosError::ParameterError(format!(
"unknown folder type '{other}', expected 'home' or 'share'"
))),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SnapshotFolder {
pub id: i64,
#[serde(default)]
pub folder_name: String,
#[serde(default)]
pub snapshot_number: i64,
#[serde(default)]
pub snapshot_schedule_status: i64,
#[serde(default)]
pub latest_snapshot_timestamp: i64,
#[serde(default)]
pub allow_operations: bool,
}
#[derive(Debug, Deserialize)]
pub struct FolderList {
#[serde(default)]
pub folders: Vec<SnapshotFolder>,
#[serde(default)]
pub total_number: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Snapshot {
pub id: i64,
#[serde(default)]
pub name: String,
#[serde(default)]
pub create_timestamp: i64,
#[serde(default)]
pub desc: String,
#[serde(default)]
pub is_locked: bool,
#[serde(default)]
pub abs_path: String,
#[serde(default)]
pub accessible: bool,
#[serde(default)]
pub inaccessible_reason: String,
#[serde(default)]
pub folder_id: i64,
#[serde(default)]
pub folder_type: String,
#[serde(default)]
pub folder_name: String,
}
#[derive(Debug, Deserialize)]
pub struct SnapshotList {
#[serde(default)]
pub list: Vec<Snapshot>,
#[serde(default)]
pub total: i64,
#[serde(default)]
pub folder_id: i64,
#[serde(default)]
pub folder_name: String,
#[serde(default)]
pub snapshot_schedule_status: i64,
}
#[derive(Debug, Serialize)]
pub struct CreateSnapshot<'a> {
pub folder_id: i64,
pub folder_type: &'a str,
pub desc: &'a str,
pub is_locked: bool,
}
#[derive(Debug, Serialize)]
pub struct EditSnapshot<'a> {
pub folder_id: i64,
pub folder_type: &'a str,
pub snapshot_id: i64,
pub desc: &'a str,
pub is_locked: bool,
}
#[derive(Debug, Serialize)]
pub struct DeleteSnapshots<'a> {
pub folder_id: i64,
pub folder_type: &'a str,
pub snapshot_ids: &'a [i64],
}
#[derive(Debug, Serialize)]
pub struct CloneSnapshot<'a> {
pub folder_id: i64,
pub folder_type: &'a str,
pub snapshot_id: i64,
pub new_name: &'a str,
}