Community-made procedural macros for error-stack.
Here is the same example shown in the error-stackREADME, modified to
use the macros provided by this crate:
use error_stack::{Report,ResultExt};use error_stack_macros2::Error;#[derive(Debug,Error)]#[display("invalid experiment description")]structParseExperimentError;fnparse_experiment(description:&str) -> Result<(u64,u64),Report<ParseExperimentError>>{let value = description
.parse::<u64>().attach_with(|| {format!("{description:?} could not be parsed as experiment")}).change_context(ParseExperimentError)?;Ok((value,2* value))}#[derive(Debug,Error)]#[display("experiment error: could not run experiment")]structExperimentError;fnstart_experiments(experiment_ids:&[usize],experiment_descriptions:&[&str],) -> Result<Vec<u64>,Report<ExperimentError>>{let experiments = experiment_ids
.iter().map(|exp_id| {let description = experiment_descriptions
.get(*exp_id).ok_or_else(|| {Report::new(ExperimentError).attach(format!("experiment {exp_id} has no valid description"))})?;let experiment = parse_experiment(description).attach(format!("experiment {exp_id} could not be parsed")).change_context(ExperimentError)?;Ok(move || experiment.0* experiment.1)}).collect::<Result<Vec<_>,Report<ExperimentError>>>().attach("unable to set up experiments")?;Ok(experiments.iter().map(|experiment| experiment()).collect())}let experiment_ids = &[0,2];let experiment_descriptions = &["10","20","3o"];let err = start_experiments(experiment_ids, experiment_descriptions).unwrap_err();assert_eq!(err.to_string(),"experiment error: could not run experiment");Need help using error-stack-macros2? Don't hesitate to reach out on
GitHub Discussions!
Before creating an issue, please consider the following:
- Refer to the documentation to make sure the error is actually a bug and not a mistake of your own.
- Make sure the issue hasn't already been reported or suggested.
- Please report any security vulnerabilities privately through Security Advisories.
- After following these steps, you can file an issue using one of our templates. Please make sure to follow our Code of Conduct.
- If you wish to submit a pull request alongside your issue, please follow our contribution guidelines.
This crate is not affiliated with the official error-stack crate or its
maintainers.