#facet #error-derive #derive

facet-error

thiserror replacement powered by facet - derive Error trait from doc comments

10 releases (6 breaking)

Uses new Rust 2024

new 0.44.1 Mar 3, 2026
0.44.0 Mar 1, 2026
0.43.2 Jan 23, 2026
0.42.0 Jan 6, 2026
0.35.0 Dec 28, 2025

#2163 in Rust patterns

Download history 23/week @ 2025-12-25 57/week @ 2026-01-01 21/week @ 2026-01-08 36/week @ 2026-01-15 91/week @ 2026-01-22 54/week @ 2026-01-29 6/week @ 2026-02-05 3/week @ 2026-02-12 42/week @ 2026-02-19 438/week @ 2026-02-26

495 downloads per month
Used in 21 crates (6 directly)

MIT/Apache

170KB
250 lines

facet-error

Coverage Status crates.io documentation MIT/Apache-2.0 licensed Discord

facet-error

A thiserror replacement powered by facet reflection. This crate is a plugin for #[derive(Facet)] that generates Display and Error trait implementations from doc comments.

Usage

use facet::Facet;

#[derive(Facet, Debug)]
#[facet(derive(Error))]
#[repr(u8)]
pub enum MyError {
    /// something went wrong
    Unknown,

    /// invalid value: {0}
    InvalidValue(String),

    /// invalid header (expected {expected}, found {found})
    InvalidHeader { expected: String, found: String },
}

This generates:

  • impl Display for MyError using doc comments as format strings
  • impl Error for MyError with proper source() implementation
  • Field interpolation works automatically for struct variants (e.g., {expected}, {found})
  • Tuple variants support positional interpolation (e.g., {0})

Features

  • Doc-driven Display: Doc comments become your error messages
  • Field interpolation: Reference struct fields by name in messages
  • Zero boilerplate: No manual Display or Error implementations
  • Integration with facet: Works seamlessly with the facet reflection system

Future Work

  • #[facet(error::source)] - mark fields as error sources
  • #[facet(error::from)] - generate From implementations
  • Support for error wrapping and transparent delegation

Sponsors

Thanks to all individual sponsors:

GitHub Sponsors Patreon

...along with corporate sponsors:

AWS Zed Depot

...without whom this work could not exist.

Special thanks

The facet logo was drawn by Misiasart.

License

Licensed under either of:

at your option.

Dependencies

~2MB
~39K SLoC