#![allow(
dead_code,
clippy::missing_docs_in_private_items,
clippy::print_stderr,
reason = "Example"
)]
use ::neuer_error::Result;
use self::library::NeuErrAttachments;
mod library {
use ::neuer_error::{NeuErr, Result, provided_attachments, traits::*};
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
#[non_exhaustive]
pub enum ErrorKind {
NotFound,
InvalidInput,
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Retryable {
No,
Yes,
}
provided_attachments!(
kind(single: ErrorKind) -> Option<ErrorKind> { |kind| kind.copied() };
retryable(single: Retryable) -> bool {
|retryable| matches!(retryable, Some(Retryable::Yes))
};
);
fn do_something_internal() -> Result<()> {
Err(NeuErr::new("Error occurred internally")
.attach(ErrorKind::InvalidInput)
.attach(Retryable::No)
.remove_marker())
}
pub fn do_something() -> Result<()> {
do_something_internal().context("Operation failed")?;
Ok(())
}
}
fn main() -> Result<()> {
match library::do_something() {
Ok(()) => {}
Err(err) if err.retryable() => {
eprintln!("Retryable error");
}
Err(_) => {
eprintln!("Non-retryable error");
}
}
library::do_something()?;
Ok(())
}