use std::{
any::Any,
error::Error,
fmt::{self, Debug},
};
use non_non_full::NonEmptyVec;
use crate::error::FetcherError;
#[derive(Debug)]
pub enum JobResult {
Ok,
Err(NonEmptyVec<FetcherError>),
Panicked {
payload: Box<dyn Any + Send + 'static>,
},
TriggerFailed(Box<dyn Error + Send + Sync>),
}
impl JobResult {
pub fn unwrap(self) {
match self {
Self::Ok => (),
Self::Err(errors) => {
unwrap_failed("called `JobResult::unwrap()` on an `Err` value", &errors);
}
Self::Panicked { payload } => unwrap_failed(
"called `JobResult::unwrap()` on a `Panicked` value",
&payload,
),
Self::TriggerFailed(err) => unwrap_failed(
"called `JobResult::unwrap()` on a `TriggerFailed` value",
&err,
),
}
}
pub fn expect(self, msg: &str) {
match self {
Self::Ok => (),
Self::Err(errors) => unwrap_failed(msg, &errors),
Self::Panicked { payload } => unwrap_failed(msg, &payload),
Self::TriggerFailed(err) => unwrap_failed(msg, &err),
}
}
}
fn unwrap_failed(msg: &str, error: &dyn fmt::Debug) {
panic!("{msg}: {error:?}");
}