Skip to main content

weavatrix_graph/payload/stable/
mapping.rs

1use super::StablePayloadGraph;
2use super::core::{EdgeSlot, NodeSlot};
3
4impl<NodePayload, EdgePayload> StablePayloadGraph<NodePayload, EdgePayload> {
5    #[must_use]
6    pub fn map_payloads<MappedNode, MappedEdge, NodeMap, EdgeMap>(
7        self,
8        mut map_node: NodeMap,
9        mut map_edge: EdgeMap,
10    ) -> StablePayloadGraph<MappedNode, MappedEdge>
11    where
12        NodeMap: FnMut(NodePayload) -> MappedNode,
13        EdgeMap: FnMut(EdgePayload) -> MappedEdge,
14    {
15        StablePayloadGraph {
16            nodes: self
17                .nodes
18                .into_iter()
19                .map(|slot| NodeSlot {
20                    generation: slot.generation,
21                    value: slot.value.map(&mut map_node),
22                    outgoing: slot.outgoing,
23                    incoming: slot.incoming,
24                })
25                .collect(),
26            edges: self
27                .edges
28                .into_iter()
29                .map(|slot| EdgeSlot {
30                    generation: slot.generation,
31                    value: slot.value.map(&mut map_edge),
32                    source: slot.source,
33                    target: slot.target,
34                    next_outgoing: slot.next_outgoing,
35                    next_incoming: slot.next_incoming,
36                })
37                .collect(),
38            free_nodes: self.free_nodes,
39            free_edges: self.free_edges,
40            node_count: self.node_count,
41            edge_count: self.edge_count,
42        }
43    }
44}