use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FolderMetaResponse {
pub data: Option<FolderMeta>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FolderMeta {
#[serde(rename = "folder_token")]
pub folder_token: String,
pub title: String,
#[serde(rename = "folder_type")]
pub folder_type: String,
#[serde(rename = "create_time")]
pub create_time: i64,
#[serde(rename = "update_time")]
pub update_time: i64,
pub owner: Option<UserInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateFileParams {
pub title: String,
#[serde(rename = "parent_type")]
pub parent_type: String,
#[serde(rename = "file_extension")]
pub file_extension: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateFileResponse {
pub data: Option<FileInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileInfo {
#[serde(rename = "file_token")]
pub file_token: String,
pub title: String,
#[serde(rename = "doc_type")]
pub doc_type: String,
#[serde(rename = "create_time")]
pub create_time: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CopyFileParams {
#[serde(rename = "folder_token")]
pub folder_token: String,
#[serde(rename = "name")]
pub name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CopyFileResponse {
pub data: Option<CopyResult>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CopyResult {
#[serde(rename = "file_token")]
pub file_token: String,
pub title: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetFolderChildrenParams {
#[serde(rename = "page_size")]
pub page_size: Option<i32>,
#[serde(rename = "page_token")]
pub page_token: Option<String>,
#[serde(rename = "doc_type")]
pub doc_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetFolderChildrenResponse {
pub data: Option<FolderChildrenData>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FolderChildrenData {
pub items: Vec<FileItem>,
#[serde(rename = "has_more")]
pub has_more: bool,
#[serde(rename = "page_token")]
pub page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileItem {
#[serde(rename = "file_token")]
pub file_token: String,
pub title: String,
#[serde(rename = "doc_type")]
pub doc_type: String,
#[serde(rename = "is_folder")]
pub is_folder: bool,
#[serde(rename = "create_time")]
pub create_time: i64,
#[serde(rename = "update_time")]
pub update_time: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateFolderParams {
pub title: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateFolderResponse {
pub data: Option<NewFolderInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NewFolderInfo {
#[serde(rename = "folder_token")]
pub folder_token: String,
pub title: String,
#[serde(rename = "create_time")]
pub create_time: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserInfo {
#[serde(rename = "open_id")]
pub open_id: String,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeleteFileResponse {
pub data: Option<DeleteResult>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeleteResult {
pub success: bool,
pub error: Option<String>,
}
#[cfg(test)]
mod tests {
use serde_json;
#[test]
fn test_serialization_roundtrip() {
let json = r#"{"test": "value"}"#;
assert!(serde_json::from_str::<serde_json::Value>(json).is_ok());
}
#[test]
fn test_deserialization_from_json() {
let json = r#"{"field": "data"}"#;
let value: serde_json::Value = serde_json::from_str(json).expect("JSON 反序列化失败");
assert_eq!(value["field"], "data");
}
}