use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WikiSpace {
pub space_id: String,
pub name: String,
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WikiSpaceNode {
pub space_id: String,
pub node_token: String,
pub obj_token: Option<String>,
pub obj_type: Option<String>,
pub parent_node_token: Option<String>,
pub title: Option<String>,
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WikiSpaceMember {
pub member_id: Option<String>,
pub member_type: Option<String>,
pub member_role: Option<String>,
#[serde(rename = "type")]
pub member_kind: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WikiSpaceSetting {
pub create_setting: String,
pub security_setting: String,
pub comment_setting: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct WikiTask {
pub task_id: Option<String>,
pub status: Option<String>,
pub task_type: Option<String>,
pub move_result: Option<Vec<serde_json::Value>>,
#[serde(default, flatten)]
pub extra: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WikiSearchResult {
pub node_id: String,
pub space_id: String,
pub obj_type: i32,
pub obj_token: String,
pub parent_id: Option<String>,
pub sort_id: Option<i32>,
pub title: Option<String>,
pub url: Option<String>,
pub icon: 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");
}
}