use std::{error::Error, fmt};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StrategyErrorKind {
InvalidArguments,
Execution,
Internal,
}
impl fmt::Display for StrategyErrorKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let label = match self {
Self::InvalidArguments => "invalid-arguments",
Self::Execution => "execution",
Self::Internal => "internal",
};
write!(f, "{label}")
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct StrategyError {
pub kind: StrategyErrorKind,
pub message: String,
}
impl StrategyError {
pub fn new(kind: StrategyErrorKind, message: impl Into<String>) -> Self {
Self {
kind,
message: message.into(),
}
}
pub fn invalid_arguments(message: impl Into<String>) -> Self {
Self::new(StrategyErrorKind::InvalidArguments, message)
}
pub fn execution(message: impl Into<String>) -> Self {
Self::new(StrategyErrorKind::Execution, message)
}
pub fn internal(message: impl Into<String>) -> Self {
Self::new(StrategyErrorKind::Internal, message)
}
}
impl fmt::Display for StrategyError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}: {}", self.kind, self.message)
}
}
impl Error for StrategyError {}