#error #diagnostics #nice #label #metadata #user-facing #weird

yanked thisdiagnostic

Add nice user-facing diagnostics to your errors without being weird about it

0.1.0 Aug 1, 2021

#4 in #weird

Apache-2.0

12KB
120 lines

thisdiagnostic

thisdiagnostic is a Rust library for adding rich diagnostic metadata to errors, for some really fancy and customizable error reporting!

Example

What You Write

use thisdiagnostic::Diagnostic;
use thiserror::Error;

#[derive(Error, Debug, Diagnostic)]
pub enum ApiError {
    /// Returned when a generic http client-related error has occurred.
    #[label("mytool::api::generic_http")]
    #[error("Request error:\n\t{0}")]
    HttpError(Box<dyn std::error::Error + Send + Sync>, String),

    /// Returned when a URL failed to parse.
    #[label("mytool::api::invalid_url")]
    #[help("Check the URL syntax. URLs must include the protocol part (https://, etc)")]
    #[error(transparent)]
    UrlParseError(#[from] Box<dyn std::error::Error + Send + Sync>),

    /// An API key is required.
    #[label("mytool::api::needs_api_key")]
    #[help("Please supply an API key.")]
    #[error("Endpoint operation requires an API key.")]
    NeedsApiKey,

    /// Unexpected response
    #[label("mytool::api::unexpected_response")]
    #[help("This is likely a bug with the server API (or its documentation). Please report it.")]
    #[error("Unexpected or undocumented response.")]
    BadResponse,
}

What You Get

$ ./mytool
Error: mytool::api::needs_api_key

Endpoint operation requires an API key.

help: Please supply an API key.

License

This project and any contributions to it are licensed under Apache 2.0.

Dependencies

~1–11MB
~80K SLoC