Gestion des erreurs simple

Pas d’entrées/sorties correctes sans une gestion des erreurs.

Dans une appli simple, il peut suffire de les propager en ajoutant des infos de contexte.

C’est facile à faire avec l’aide de anyhow ou eyre :

// Even the main function can return a Result
fn main() -> anyhow::Result<()> {
    // Parse CLI arguments
    let args = Args::parse();

    // Load data points from Criterion
    let data = criterion::read_all(&args).context("loading data from Criterion")?;

    // Rearrange data in a layout suitable for plotting
    let traces = Traces::new(data).context("rearranging data into plot traces")?;

    // Abort if there is nothing to plot
    if traces.is_empty() {
        bail!("specified regex does not select any trace")
    }

    // Draw the plot
    plot::draw(&args, traces).context("drawing the performance plot")
}