use assert_matches::assert_matches;
use error_fatality::{Fatality, Split};
use thiserror::Error;
#[derive(Debug, Error)]
#[error("We tried")]
struct Fatal;
#[derive(Debug, Error)]
#[error("Get a dinosaur bandaid")]
struct Bobo;
#[derive(Debug, Error, Fatality, Split)]
enum Kaboom {
#[error(transparent)]
#[fatal(true)]
Iffy(#[from] Fatal),
#[error(transparent)]
#[fatal(false)]
Bobo(#[from] Bobo),
}
fn iffy() -> Result<(), Kaboom> {
Err(Fatal)?
}
fn bobo() -> Result<(), Kaboom> {
Err(Bobo)?
}
fn main() {
if let Err(fatal) = iffy().unwrap_err().split() {
assert_matches!(fatal, FatalKaboom::Iffy(_));
}
if let Ok(bobo) = bobo().unwrap_err().split() {
assert_matches!(bobo, JfyiKaboom::Bobo(_));
}
}