Skip to main content

jellyflow_runtime/io/view_state/
pure.rs

1use serde::{Deserialize, Serialize};
2
3use jellyflow_core::core::{CanvasPoint, EdgeId, GroupId, NodeId};
4
5use super::default_zoom;
6
7/// Pure persisted view-state payload.
8///
9/// This excludes interaction policy and runtime tuning so persistence boundaries can evolve without
10/// forcing every in-memory/runtime consumer to change in the same step.
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
12pub struct NodeGraphPureViewState {
13    #[serde(default)]
14    pub pan: CanvasPoint,
15    #[serde(default = "default_zoom")]
16    pub zoom: f32,
17    #[serde(default, skip_serializing_if = "Vec::is_empty")]
18    pub selected_nodes: Vec<NodeId>,
19    #[serde(default, skip_serializing_if = "Vec::is_empty")]
20    pub selected_edges: Vec<EdgeId>,
21    #[serde(default, skip_serializing_if = "Vec::is_empty")]
22    pub selected_groups: Vec<GroupId>,
23    #[serde(default, skip_serializing_if = "Vec::is_empty")]
24    pub draw_order: Vec<NodeId>,
25    #[serde(default, skip_serializing_if = "Vec::is_empty")]
26    pub edge_draw_order: Vec<EdgeId>,
27    #[serde(default, skip_serializing_if = "Vec::is_empty")]
28    pub group_draw_order: Vec<GroupId>,
29}
30
31impl Default for NodeGraphPureViewState {
32    fn default() -> Self {
33        Self {
34            pan: CanvasPoint::default(),
35            zoom: default_zoom(),
36            selected_nodes: Vec::new(),
37            selected_edges: Vec::new(),
38            selected_groups: Vec::new(),
39            draw_order: Vec::new(),
40            edge_draw_order: Vec::new(),
41            group_draw_order: Vec::new(),
42        }
43    }
44}