impl-more

Concise trait implementations.

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

Usage

```rust struct MyNewTypeStruct(String);

implmore::implasref!(MyNewTypeStruct => String); implmore::implasmut!(MyNewTypeStruct => String);

implmore::implderef!(MyNewTypeStruct => String); implmore::implderefmut!(MyNewTypeStruct); // or, to deref through String too: // implmore::forwardderefand_mut!(MyNewTypeStruct, ref str);

implmore::implfrom!(String => MyNewTypeStruct); implmore::implinto!(MyNewTypeStruct => String);

enum MyEnum { Bar, Qux, }

implmore::impldisplay_enum!(MyEnum, Bar => "bar", Qux => "qux");

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

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

[derive(Debug)]

struct MyError(eyre::Report);

implmore::forwarddisplay!(MyError); implmore::forwarderror!(MyError);

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

[derive(Debug)]

enum Err { Io(std::io::Error), Generic(String), }

implmore::impldisplayenum!(Err, Io(err) => "{err}", Generic(msg) => "{msg}"); implmore::implerrorenum!(Err, Io(err) => err); ```