moduforge_core/model/
patch.rs1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4use super::{mark::Mark, node::Node, types::NodeId};
5use std::collections::HashMap;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
10pub enum Patch {
11 UpdateAttr {
13 path: Vec<String>,
15 id: NodeId,
17 old: HashMap<String, Value>,
19 new: HashMap<String, Value>,
21 },
22 AddNode {
24 path: Vec<String>,
26 parent_id: NodeId,
28 nodes: Vec<Node>,
30 },
31 AddMark {
33 path: Vec<String>,
35 node_id: NodeId,
37 marks: Vec<Mark>,
39 },
40 RemoveMark {
42 path: Vec<String>,
44 parent_id: NodeId,
46 marks: Vec<Mark>,
48 },
49 RemoveNode {
51 path: Vec<String>,
53 parent_id: NodeId,
55 nodes: Vec<Node>,
57 },
58 MoveNode {
60 path: Vec<String>,
61 node_id: NodeId,
62 source_parent_id: NodeId,
63 target_parent_id: NodeId,
64 position: Option<usize>,
65 },
66 SortChildren {
68 path: Vec<String>,
70 parent_id: NodeId,
72 old_children: Vec<NodeId>,
74 new_children: Vec<NodeId>,
76 },
77}