5 releases

0.2.3 Nov 22, 2024
0.2.2 Nov 15, 2024
0.2.1 Nov 15, 2024
0.2.0 Nov 15, 2024
0.1.0 Nov 14, 2024

#2195 in Procedural macros

Download history 32345/week @ 2026-02-20 31226/week @ 2026-02-27 44734/week @ 2026-03-06 54709/week @ 2026-03-13 51890/week @ 2026-03-20 49739/week @ 2026-03-27 46776/week @ 2026-04-03 36987/week @ 2026-04-10 42898/week @ 2026-04-17 51440/week @ 2026-04-24 55125/week @ 2026-05-01 50944/week @ 2026-05-08 57295/week @ 2026-05-15 54657/week @ 2026-05-22 64136/week @ 2026-05-29 66768/week @ 2026-06-05

254,770 downloads per month
Used in 110 crates (16 directly)

MIT license

8KB
141 lines

boxed_error

Experimental opinionated way to provide helper methods for use with boxing errors.

Before:

use thiserror::Error;

#[derive(Error, Debug)]
#[error(transparent)]
pub struct DenoResolveError(pub Box<DenoResolveErrorKind>);

impl DenoResolveError {
  pub fn as_kind(&self) -> &DenoResolveErrorKind {
    &self.0
  }

  pub fn into_kind(self) -> DenoResolveErrorKind {
    *self.0
  }
}

impl<E> From<E> for DenoResolveError
where
  DenoResolveErrorKind: From<E>,
{
  fn from(err: E) -> Self {
    DenoResolveError(Box::new(DenoResolveErrorKind::from(err)))
  }
}

#[derive(Debug, Error)]
pub enum DenoResolveErrorKind {
  #[error("Importing ...")]
  InvalidVendorFolderImport,
  #[error(transparent)]
  MappedResolution(#[from] MappedResolutionError),
  // ...
}

impl DenoResolveErrorKind {
  pub fn into_box(self) -> DenoResolveError {
    DenoResolveError(Box::new(self))
  }
}

After:

use boxed_error::Boxed;
use thiserror::Error;

#[derive(Debug, Boxed)]
pub enum DenoResolveError(pub Box<DenoResolveErrorKind>);

#[derive(Debug, Error)]
pub enum DenoResolveErrorKind {
  #[error("Importing ...")]
  InvalidVendorFolderImport,
  #[error(transparent)]
  MappedResolution(#[from] MappedResolutionError),
  // ...
}

Dependencies

~90–430KB
~10K SLoC