use serde::{Deserialize, Serialize}; use serde_json::Value; use std::collections::BTreeMap; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct MindmapNodeRef { pub kind: String, #[serde(skip_serializing_if = "Option::is_none")] pub asset_id: Option, #[serde(skip_serializing_if = "Option::is_none")] pub file_url: Option, #[serde(skip_serializing_if = "Option::is_none")] pub page: Option, #[serde(skip_serializing_if = "Option::is_none")] pub slide: Option, #[serde(skip_serializing_if = "Option::is_none")] pub title: Option, #[serde(skip_serializing_if = "Option::is_none")] pub snippet: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct MindmapNodeData { #[serde(skip_serializing_if = "Option::is_none")] pub uid: Option, #[serde(skip_serializing_if = "Option::is_none")] pub text: Option, #[serde(skip_serializing_if = "Option::is_none")] pub hyperlink: Option, #[serde(skip_serializing_if = "Option::is_none")] pub note: Option, #[serde(skip_serializing_if = "Option::is_none")] pub refs: Option>, #[serde(flatten, default)] pub extra: BTreeMap, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct MindmapTreeNode { pub data: MindmapNodeData, #[serde(default)] pub children: Vec, #[serde(flatten, default)] pub extra: BTreeMap, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct MindmapNodeInput { #[serde(skip_serializing_if = "Option::is_none")] pub uid: Option, pub text: String, #[serde(skip_serializing_if = "Option::is_none")] pub hyperlink: Option, #[serde(skip_serializing_if = "Option::is_none")] pub note: Option, #[serde(skip_serializing_if = "Option::is_none")] pub refs: Option>, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] #[serde(tag = "op", rename_all = "camelCase")] pub enum MindmapOp { #[serde(alias = "add_child")] AddChild { #[serde(rename = "parentUid")] #[serde(alias = "parent_uid")] parent_uid: String, node: MindmapNodeInput, }, #[serde(alias = "add_sibling_after")] AddSiblingAfter { #[serde(rename = "targetUid")] #[serde(alias = "target_uid")] target_uid: String, node: MindmapNodeInput, }, #[serde(alias = "update_node", alias = "updateNode")] UpdateText { uid: String, #[serde(alias = "value")] text: String, }, #[serde(alias = "set_link", alias = "set_hyperlink")] SetHyperlink { #[serde(alias = "id")] uid: String, #[serde(alias = "url")] hyperlink: Option, }, #[serde(alias = "set_refs")] SetRefs { #[serde(alias = "id")] uid: String, refs: Vec, }, #[serde(alias = "append_note")] AppendNote { #[serde(alias = "id")] uid: String, #[serde(alias = "note")] markdown: String, }, #[serde(alias = "delete_node")] DeleteNode { #[serde(alias = "id")] uid: String, }, }