#derive #implementation #no-std #implement

no-std impl-more

Concise, declarative trait implementation macros

15 unstable releases (3 breaking)

0.3.1 Aug 29, 2025
0.2.0 Aug 29, 2025
0.1.9 Dec 24, 2024
0.1.8 Oct 16, 2024
0.1.1 Oct 17, 2022

#349 in Rust patterns

Download history 449801/week @ 2025-10-11 411791/week @ 2025-10-18 464890/week @ 2025-10-25 475419/week @ 2025-11-01 448199/week @ 2025-11-08 492863/week @ 2025-11-15 343103/week @ 2025-11-22 419888/week @ 2025-11-29 616580/week @ 2025-12-06 577362/week @ 2025-12-13 261950/week @ 2025-12-20 211381/week @ 2025-12-27 523092/week @ 2026-01-03 677680/week @ 2026-01-10 721512/week @ 2026-01-17 710868/week @ 2026-01-24

2,674,899 downloads per month
Used in 1,382 crates (4 directly)

MIT/Apache

43KB
794 lines

impl-more

Concise trait implementations.

crates.io Documentation MIT or Apache 2.0 licensed
dependency status Download CircleCI

Usage

struct MyNewTypeStruct(String);

impl_more::impl_as_ref!(MyNewTypeStruct => String);
impl_more::impl_as_mut!(MyNewTypeStruct => String);

impl_more::impl_deref!(MyNewTypeStruct => String);
impl_more::impl_deref_mut!(MyNewTypeStruct);
// or, to deref through String too:
// impl_more::forward_deref_and_mut!(MyNewTypeStruct, ref str);

impl_more::impl_from!(String => MyNewTypeStruct);
impl_more::impl_into!(MyNewTypeStruct => String);

enum MyEnum {
    Bar,
    Qux,
}

impl_more::impl_display_enum!(MyEnum, Bar => "bar", Qux => "qux");

enum Coords {
    Xy(i64, i64),
    Xyz(i64, i64, i64),
}

impl_more::impl_display_enum!(
    Coords,
    Xy(x, y) => "{x}, {y}",
    Xyz(x, y, z) => "{x}, {y}, {z}",
);

#[derive(Debug)]
struct MyError(eyre::Report);

impl_more::forward_display!(MyError);
impl_more::forward_error!(MyError);

let err = MyError(eyre::eyre!("something went wrong"));
assert_eq!(err.source().unwrap().to_string(), "something went wrong");

#[derive(Debug)]
enum Err {
    Io(std::io::Error),
    Generic(String),
}

impl_more::impl_display_enum!(Err, Io(err) => "{err}", Generic(msg) => "{msg}");
impl_more::impl_error_enum!(Err, Io(err) => err);

No runtime deps