weavatrix_graph/payload/stable/
mapping.rs1use 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}