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

#291 in Procedural macros

Download history 1821/week @ 2024-12-08 1839/week @ 2024-12-15 1631/week @ 2024-12-22 1467/week @ 2024-12-29 1707/week @ 2025-01-05 2321/week @ 2025-01-12 1990/week @ 2025-01-19 2305/week @ 2025-01-26 2145/week @ 2025-02-02 2245/week @ 2025-02-09 2435/week @ 2025-02-16 3077/week @ 2025-02-23 2396/week @ 2025-03-02 2437/week @ 2025-03-09 3017/week @ 2025-03-16 2144/week @ 2025-03-23

10,233 downloads per month
Used in 32 crates (13 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

~195–620KB
~15K SLoC