use searpc::Result;
use searpc_macro::rpc;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct Repo {
pub id: String,
pub name: String,
pub worktree: String,
#[serde(default)]
pub auto_sync: bool,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct CloneTask {
pub repo_id: String,
pub repo_name: String,
pub state: String,
#[serde(default)]
pub error: i32,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SyncTask {
pub repo_id: String,
pub state: String,
#[serde(default)]
pub error: i32,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TransferTask {
pub repo_id: String,
pub block_done: i64,
pub block_total: i64,
pub rate: i64,
#[serde(default)]
pub rt_state: String,
#[serde(default)]
pub fs_objects_done: i64,
#[serde(default)]
pub fs_objects_total: i64,
}
#[rpc(prefix = "seafile")]
pub trait SeafileRpc {
fn get_repo_list(&mut self, start: i32, limit: i32) -> Result<Vec<Repo>>;
fn get_clone_tasks(&mut self) -> Result<Vec<CloneTask>>;
fn get_repo_sync_task(&mut self, repo_id: &str) -> Result<Option<SyncTask>>;
fn find_transfer_task(&mut self, repo_id: &str) -> Result<TransferTask>;
#[rpc(name = "seafile_is_auto_sync_enabled")]
fn is_auto_sync_enabled(&mut self) -> Result<bool>;
fn sync_error_id_to_str(&mut self, error_id: i32) -> Result<String>;
fn get_config(&mut self, key: &str) -> Result<String>;
fn set_config(&mut self, key: &str, value: &str) -> Result<i32>;
fn shutdown(&mut self) -> Result<i32>;
}