use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
pub struct UserInfo {
pub baidu_name: String,
pub netdisk_name: String,
pub avatar_url: String,
pub vip_type: i64,
pub uk: i64,
}
#[derive(Serialize, Deserialize)]
pub struct QuotaInfo {
pub total: i64,
pub expire: bool,
pub used: i64,
pub free: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct FileInfo {
pub path: String,
pub category: i64,
pub fs_id: i64,
pub isdir: i64,
pub local_ctime: i64,
pub local_mtime: i64,
pub server_ctime: i64,
pub server_mtime: i64,
pub server_filename: String,
pub md5: Option<String>,
pub size: i64,
pub thumbs: Option<String>,
pub dir_empty: Option<i64>,
}
pub struct FileInfoEx {
pub category: i64,
pub dlink: String,
pub file_name: String,
pub is_dir: i64,
pub server_ctime: i64,
pub server_mtime: i64,
pub size: i64,
pub height: i64,
pub width: i64,
pub date_taken: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct SearchResult {
pub category: i64,
pub fs_id: i64,
pub isdir: i64,
pub local_ctime: i64,
pub local_mtime: i64,
pub server_ctime: i64,
pub server_mtime: i64,
pub md5: Option<String>,
pub size: i64,
pub thumbs: Option<String>,
}
#[derive(Clone)]
pub struct FileInfoIter {
inner_data: Vec<FileInfo>,
inner_count: usize,
}
impl FileInfoIter {
pub fn new(in_vec: Vec<FileInfo>) -> FileInfoIter {
FileInfoIter {
inner_data: in_vec,
inner_count: 0,
}
}
}
pub trait FileId {
fn ret_file_id(&self) -> i64 {
0_i64
}
}
impl FileId for i64 {
fn ret_file_id(&self) -> i64 {
*self
}
}
impl FileId for FileInfo {
fn ret_file_id(&self) -> i64 {
self.fs_id
}
}
impl FileId for SearchResult {
fn ret_file_id(&self) -> i64 {
self.fs_id
}
}
impl Iterator for FileInfoIter {
type Item = FileInfo;
fn next(&mut self) -> Option<Self::Item> {
if self.inner_count >= self.inner_data.len() {
None
} else {
let tmp = Some(self.inner_data[self.inner_count].clone());
self.inner_count += 1;
tmp
}
}
}
#[derive(Serialize)]
pub struct GetFileListParams {
pub dir: String,
pub start: i64,
pub limit: i64,
}
#[derive(Serialize)]
pub struct GetFileInfoParams {
#[serde(serialize_with = "serialize_fsids")]
pub fsids: Vec<i64>,
pub dlink: i64,
pub extra: i64,
}
fn serialize_fsids<S>(fsids: &[i64], serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let tmp_string: String = fsids
.iter()
.map(|x| x.to_string())
.collect::<Vec<_>>()
.join(",");
serializer.serialize_str(&format!("[{}]", tmp_string))
}
#[derive(Serialize)]
pub struct SearchParams {
pub key: String,
pub dir: String,
pub recursion: i64,
pub page: i64,
pub num: i64,
pub web: i64,
}
#[derive(Serialize)]
pub struct EmptyParams;