#[cfg(feature = "alloc")]
use crate::impls::{SymmetricCSR2D, UpperTriangularCSR2D};
#[cfg(feature = "alloc")]
use crate::traits::{Matrix2D, SizedSparseMatrix2D, TryFromUsize};
use crate::{impls::MutabilityError, traits::Edges};
#[derive(Debug, Clone, thiserror::Error, PartialEq, Eq)]
pub enum EdgesBuilderError<E: Edges> {
#[error("Missing builder attribute: {0}")]
MissingAttribute(&'static str),
#[error("Unexpected number of edges: expected {expected}, got {actual}")]
NumberOfEdges {
expected: E::EdgeId,
actual: E::EdgeId,
},
#[error("Matrix error: {0}")]
MatrixError(#[from] MutabilityError<E::Matrix>),
}
#[cfg(feature = "alloc")]
impl<M> From<EdgesBuilderError<UpperTriangularCSR2D<M>>> for EdgesBuilderError<SymmetricCSR2D<M>>
where
M: SizedSparseMatrix2D<ColumnIndex = <M as Matrix2D>::RowIndex>,
M::RowIndex: TryFromUsize,
M::SparseIndex: TryFromUsize,
{
#[inline]
fn from(e: EdgesBuilderError<UpperTriangularCSR2D<M>>) -> Self {
match e {
EdgesBuilderError::MissingAttribute(attr) => EdgesBuilderError::MissingAttribute(attr),
EdgesBuilderError::NumberOfEdges { expected, actual } => {
EdgesBuilderError::NumberOfEdges { expected, actual }
}
EdgesBuilderError::MatrixError(e) => EdgesBuilderError::MatrixError(e.into()),
}
}
}