Skip to main content

jellyflow_core/ops/transaction/
endpoints.rs

1use serde::{Deserialize, Serialize};
2
3use crate::core::{Edge, PortId};
4
5/// Edge endpoint pair (from/to ports).
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub struct EdgeEndpoints {
8    pub from: PortId,
9    pub to: PortId,
10}
11
12impl EdgeEndpoints {
13    pub fn new(from: PortId, to: PortId) -> Self {
14        Self { from, to }
15    }
16
17    pub fn from_edge(edge: &Edge) -> Self {
18        Self::new(edge.from, edge.to)
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25    use crate::core::{EdgeKind, EdgeReconnectable};
26
27    #[test]
28    fn edge_endpoints_can_snapshot_edge_ports() {
29        let from = PortId::new();
30        let to = PortId::new();
31        let edge = Edge {
32            kind: EdgeKind::Data,
33            from,
34            to,
35            hidden: false,
36            selectable: Some(true),
37            focusable: None,
38            interaction_width: None,
39            deletable: Some(false),
40            reconnectable: Some(EdgeReconnectable::Bool(true)),
41        };
42
43        assert_eq!(
44            EdgeEndpoints::from_edge(&edge),
45            EdgeEndpoints::new(from, to)
46        );
47    }
48}