bounded_graph 0.3.0

A thin newtype wrapper for `petgraph` to assist in the creation of graphs with restrictions on their edges
Documentation
use std::ops::{Deref, DerefMut};

use petgraph::csr::IndexType;

use crate::{nodes::FixedEdgeCount, EdgeBounds, SimpleEdgeBounds};

impl<const MAX_IN: usize, const MAX_OUT: usize, T: Default> Default
    for FixedEdgeCount<MAX_IN, MAX_OUT, T>
{
    fn default() -> Self {
        Self { data: T::default() }
    }
}

impl<const MAX_IN: usize, const MAX_OUT: usize, T, Ix: IndexType> EdgeBounds<Ix>
    for FixedEdgeCount<MAX_IN, MAX_OUT, T>
{
    fn max_incoming_edges(&self) -> Ix {
        Ix::new(MAX_IN)
    }

    fn max_outgoing_edges(&self) -> Ix {
        Ix::new(MAX_OUT)
    }
}

impl<const MAX_IN: usize, const MAX_OUT: usize, T> SimpleEdgeBounds
    for FixedEdgeCount<MAX_IN, MAX_OUT, T>
{
}

// The edge counts MAX_IN and MAX_OUT are const generic parameters and cannot be mutated
impl<const MAX_IN: usize, const MAX_OUT: usize, T> crate::ImmutableEdgeBounds
    for FixedEdgeCount<MAX_IN, MAX_OUT, T>
{
}

impl<const MAX_IN: usize, const MAX_OUT: usize, T> Deref for FixedEdgeCount<MAX_IN, MAX_OUT, T> {
    type Target = T;

    fn deref(&self) -> &Self::Target {
        &self.data
    }
}

impl<const MAX_IN: usize, const MAX_OUT: usize, T> DerefMut for FixedEdgeCount<MAX_IN, MAX_OUT, T> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.data
    }
}