use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum DocType {
#[serde(rename = "doc")]
Doc,
#[serde(rename = "sheet")]
Sheet,
#[serde(rename = "slide")]
Slide,
#[serde(rename = "mindnote")]
Mindnote,
#[serde(other)]
Unknown,
}
impl Default for DocType {
fn default() -> Self {
DocType::Doc
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum DocStatus {
#[serde(rename = "draft")]
Draft,
#[serde(rename = "published")]
Published,
#[serde(rename = "archived")]
Archived,
#[serde(other)]
Unknown,
}
impl Default for DocStatus {
fn default() -> Self {
DocStatus::Draft
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct DocumentInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub doc_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub doc_type: Option<DocType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<DocStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub create_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub update_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creator: Option<Creator>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Creator {
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SheetMeta {
#[serde(skip_serializing_if = "Option::is_none")]
pub sheet_count: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sheets: Option<Vec<SheetInfo>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SheetInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub sheet_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub row_count: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub col_count: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum ContentFormat {
#[serde(rename = "text")]
Text,
#[serde(rename = "rich_text")]
RichText,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct DocumentContent {
#[serde(skip_serializing_if = "Option::is_none")]
pub format: Option<ContentFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub revision: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum BatchUpdateOperationType {
#[serde(rename = "insert")]
Insert,
#[serde(rename = "delete")]
Delete,
#[serde(rename = "replace")]
Replace,
#[serde(rename = "update_title")]
UpdateTitle,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct BatchUpdateOperation {
#[serde(skip_serializing_if = "Option::is_none")]
pub operation_type: Option<BatchUpdateOperationType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_index: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_index: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub new_title: Option<String>,
}
impl Default for BatchUpdateOperation {
fn default() -> Self {
Self {
operation_type: None,
start_index: None,
end_index: None,
content: None,
new_title: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
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).unwrap();
assert_eq!(value["field"], "data");
}
}