Expand description
Community-made procedural macros for error-stack
.
§Example
Here is the same example shown in the error-stack
README
, 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")]
struct ParseExperimentError;
fn parse_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")]
struct ExperimentError;
fn start_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");
§Support
Need help using error-stack-macros2
? Don’t hesitate to reach out on
GitHub Discussions!
§Links
§Contributing
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.
§Disclaimer
This crate is not affiliated with the official error-stack
crate or its
maintainers.
Derive Macros§
- Error
- Derive macro for the
Error
trait that implements the best practices forerror-stack
.