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            hidden: false,
33            selectable: Some(true),
34            focusable: None,
35            interaction_width: None,
36            deletable: Some(false),
37            reconnectable: Some(EdgeReconnectable::Bool(true)),
38            ..Edge::new(EdgeKind::Data, from, to)
39        };
40
41        assert_eq!(
42            EdgeEndpoints::from_edge(&edge),
43            EdgeEndpoints::new(from, to)
44        );
45    }
46}