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

#320 in Procedural macros

Download history 1909/week @ 2024-12-09 1863/week @ 2024-12-16 1613/week @ 2024-12-23 1479/week @ 2024-12-30 1790/week @ 2025-01-06 2159/week @ 2025-01-13 2105/week @ 2025-01-20 2294/week @ 2025-01-27 2058/week @ 2025-02-03 2279/week @ 2025-02-10 2519/week @ 2025-02-17 2985/week @ 2025-02-24 2372/week @ 2025-03-03 2507/week @ 2025-03-10 3056/week @ 2025-03-17 2180/week @ 2025-03-24

10,260 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

~190–620KB
~15K SLoC