#derive #implementation #deref-mut #no-std #implement

no-std impl-more

Concise, declarative trait implementation macros

9 releases

0.1.6 Jul 27, 2023
0.1.5 Mar 4, 2023
0.1.3 Feb 24, 2023
0.1.1 Oct 17, 2022
0.0.2 Sep 25, 2022

#210 in Development tools

Download history 34353/week @ 2023-11-27 32940/week @ 2023-12-04 35686/week @ 2023-12-11 28490/week @ 2023-12-18 16709/week @ 2023-12-25 27617/week @ 2024-01-01 40249/week @ 2024-01-08 35833/week @ 2024-01-15 36797/week @ 2024-01-22 36749/week @ 2024-01-29 37367/week @ 2024-02-05 39474/week @ 2024-02-12 35229/week @ 2024-02-19 39230/week @ 2024-02-26 42967/week @ 2024-03-04 15583/week @ 2024-03-11

134,768 downloads per month
Used in 154 crates (3 directly)

MIT/Apache

38KB
705 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