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, sync::Arc};
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 node: Arc<Node>,
30 },
31 AddMark {
33 path: Vec<String>,
35 node_id: NodeId,
37 mark: Mark,
39 },
40 RemoveMark {
42 path: Vec<String>,
44 parent_id: NodeId,
46 marks: Vec<Arc<Mark>>,
48 },
49 RemoveNode {
51 path: Vec<String>,
53 parent_id: NodeId,
55 nodes: Vec<Arc<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 ReplaceNode {
67 path: Vec<String>,
68 old: Arc<Node>,
69 new: Arc<Node>,
70 },
71}