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

#490 in Procedural macros

Download history 5748/week @ 2025-09-14 6382/week @ 2025-09-21 9634/week @ 2025-09-28 8036/week @ 2025-10-05 7048/week @ 2025-10-12 8136/week @ 2025-10-19 10153/week @ 2025-10-26 7613/week @ 2025-11-02 7623/week @ 2025-11-09 7582/week @ 2025-11-16 8886/week @ 2025-11-23 19856/week @ 2025-11-30 38522/week @ 2025-12-07

75,615 downloads per month
Used in 66 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

~165–580KB
~14K SLoC