use core::result;
use alloc::fmt;
use alloc::string::String;
#[derive(Debug)]
pub enum DaachorseError {
InvalidArgument(InvalidArgumentError),
DuplicatePattern(DuplicatePatternError),
AutomatonScale(AutomatonScaleError),
InvalidConversion(InvalidConversionError),
InvalidAutomaton(InvalidAutomatonError),
}
impl fmt::Display for DaachorseError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Self::InvalidArgument(e) => e.fmt(f),
Self::DuplicatePattern(e) => e.fmt(f),
Self::AutomatonScale(e) => e.fmt(f),
Self::InvalidConversion(e) => e.fmt(f),
Self::InvalidAutomaton(e) => e.fmt(f),
}
}
}
impl DaachorseError {
pub(crate) const fn invalid_argument(arg: &'static str, op: &'static str, value: u32) -> Self {
Self::InvalidArgument(InvalidArgumentError { arg, op, value })
}
pub(crate) const fn duplicate_pattern(pattern: String) -> Self {
Self::DuplicatePattern(DuplicatePatternError { pattern })
}
pub(crate) const fn automaton_scale(arg: &'static str, max_value: u32) -> Self {
Self::AutomatonScale(AutomatonScaleError { arg, max_value })
}
pub(crate) const fn invalid_conversion(arg: &'static str, target: &'static str) -> Self {
Self::InvalidConversion(InvalidConversionError { arg, target })
}
pub(crate) const fn invalid_automaton() -> Self {
Self::InvalidAutomaton(InvalidAutomatonError)
}
}
#[derive(Debug)]
pub struct InvalidArgumentError {
arg: &'static str,
op: &'static str,
value: u32,
}
impl fmt::Display for InvalidArgumentError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"InvalidArgumentError: {} must be {} {}",
self.arg, self.op, self.value
)
}
}
#[derive(Debug)]
pub struct DuplicatePatternError {
pattern: String,
}
impl fmt::Display for DuplicatePatternError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "DuplicatePatternError: {}", self.pattern)
}
}
#[derive(Debug)]
pub struct AutomatonScaleError {
arg: &'static str,
max_value: u32,
}
impl fmt::Display for AutomatonScaleError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"AutomatonScaleError: {} must be <= {}",
self.arg, self.max_value
)
}
}
#[derive(Debug)]
pub struct InvalidConversionError {
arg: &'static str,
target: &'static str,
}
impl fmt::Display for InvalidConversionError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"InvalidConversionError: {} cannot be converted to {}",
self.arg, self.target
)
}
}
#[derive(Debug)]
pub struct InvalidAutomatonError;
impl fmt::Display for InvalidAutomatonError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "InvalidAutomatonError: invalid serialized automaton")
}
}
pub type Result<T, E = DaachorseError> = result::Result<T, E>;