moduforge_transform/
patch.rs1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4use std::collections::HashMap;
5
6use moduforge_model::{mark::Mark, node::Node, types::NodeId};
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
11pub enum Patch {
12    UpdateAttr {
14        path: Vec<String>,
16        id: NodeId,
18        old: HashMap<String, Value>,
20        new: HashMap<String, Value>,
22    },
23    AddNode {
25        path: Vec<String>,
27        parent_id: NodeId,
29        nodes: Vec<Node>,
31    },
32    AddMark {
34        path: Vec<String>,
36        node_id: NodeId,
38        marks: Vec<Mark>,
40    },
41    RemoveMark {
43        path: Vec<String>,
45        parent_id: NodeId,
47        marks: Vec<Mark>,
49    },
50    RemoveNode {
52        path: Vec<String>,
54        parent_id: NodeId,
56        nodes: Vec<Node>,
58    },
59    MoveNode {
61        path: Vec<String>,
62        node_id: NodeId,
63        source_parent_id: NodeId,
64        target_parent_id: NodeId,
65        position: Option<usize>,
66    },
67    SortChildren {
69        path: Vec<String>,
71        parent_id: NodeId,
73        old_children: Vec<NodeId>,
75        new_children: Vec<NodeId>,
77    },
78}