use serde::{Deserialize, Serialize};
use moduforge_model::{attrs::Attrs, mark::Mark, node::Node, types::NodeId};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Patch {
UpdateAttr {
path: Vec<String>,
id: NodeId,
old: Attrs,
new: Attrs,
},
AddNode {
path: Vec<String>,
parent_id: NodeId,
nodes: Vec<Node>,
},
AddMark {
path: Vec<String>,
node_id: NodeId,
marks: Vec<Mark>,
},
RemoveMark {
path: Vec<String>,
parent_id: NodeId,
marks: Vec<Mark>,
},
RemoveNode {
path: Vec<String>,
parent_id: NodeId,
nodes: Vec<Node>,
},
MoveNode {
path: Vec<String>,
node_id: NodeId,
source_parent_id: NodeId,
target_parent_id: NodeId,
position: Option<usize>,
},
SortChildren {
path: Vec<String>,
parent_id: NodeId,
old_children: Vec<NodeId>,
new_children: Vec<NodeId>,
},
}