weavatrix-graph 0.6.1

Deterministic, evidence-carrying graph primitives for repository intelligence
Documentation
use super::StablePayloadGraph;
use super::core::{EdgeSlot, NodeSlot};

impl<NodePayload, EdgePayload> StablePayloadGraph<NodePayload, EdgePayload> {
    #[must_use]
    pub fn map_payloads<MappedNode, MappedEdge, NodeMap, EdgeMap>(
        self,
        mut map_node: NodeMap,
        mut map_edge: EdgeMap,
    ) -> StablePayloadGraph<MappedNode, MappedEdge>
    where
        NodeMap: FnMut(NodePayload) -> MappedNode,
        EdgeMap: FnMut(EdgePayload) -> MappedEdge,
    {
        StablePayloadGraph {
            nodes: self
                .nodes
                .into_iter()
                .map(|slot| NodeSlot {
                    generation: slot.generation,
                    value: slot.value.map(&mut map_node),
                    outgoing: slot.outgoing,
                    incoming: slot.incoming,
                })
                .collect(),
            edges: self
                .edges
                .into_iter()
                .map(|slot| EdgeSlot {
                    generation: slot.generation,
                    value: slot.value.map(&mut map_edge),
                    source: slot.source,
                    target: slot.target,
                    next_outgoing: slot.next_outgoing,
                    next_incoming: slot.next_incoming,
                })
                .collect(),
            free_nodes: self.free_nodes,
            free_edges: self.free_edges,
            node_count: self.node_count,
            edge_count: self.edge_count,
        }
    }
}