use core::fmt;
use std::error::Error;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CombinatoricsError {
KExceedsN {
n: u64,
k: u64,
},
FactorialOverflow(u64),
PermutationOverflow {
n: u64,
k: u64,
},
CombinationOverflow {
n: u64,
k: u64,
},
}
impl fmt::Display for CombinatoricsError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::KExceedsN { n, k } => {
write!(
formatter,
"k must be less than or equal to n, got k={k}, n={n}"
)
},
Self::FactorialOverflow(n) => {
write!(formatter, "factorial overflowed u128 for n={n}")
},
Self::PermutationOverflow { n, k } => {
write!(formatter, "permutations overflowed u128 for n={n}, k={k}")
},
Self::CombinationOverflow { n, k } => {
write!(formatter, "combinations overflowed u128 for n={n}, k={k}")
},
}
}
}
impl Error for CombinatoricsError {}