Crates.io | easy-conv |
lib.rs | easy-conv |
version | 0.1.2 |
source | src |
created_at | 2023-06-07 06:56:32.136338 |
updated_at | 2023-06-07 07:28:17.553544 |
description | Cut down on trivial `impl From for B` boilerplate code |
homepage | |
repository | https://github.com/cyqsimon/easy-conv |
max_upload_size | |
id | 884536 |
size | 8,709 |
Cut down on trivial impl From<A> for B
boilerplate code.
Ever tired of code that looks like this?
enum Choices {
Alpha(TypeA),
Bravo(TypeB),
Charlie(TypeC),
}
impl From<TypeA> for Choices {
fn from(val: TypeA) -> Self {
Choices::Alpha(val)
}
}
impl From<TypeB> for Choices {
fn from(val: TypeB) -> Self {
Choices::Bravo(val)
}
}
impl From<TypeC> for Choices {
fn from(val: TypeC) -> Self {
Choices::Charlie(val)
}
}
How about this?
enum Choices {
Alpha(TypeA),
Bravo(TypeB),
Charlie(TypeC),
}
newtype_wrap!(Choices, Alpha, TypeA);
newtype_wrap!(Choices, Bravo, TypeB);
newtype_wrap!(Choices, Charlie, TypeC);
Better? I certainly think so.
There are also newtype_wrap_from_any
and chained_into
macros, which each does
their quirky little thing. See documentation.
If you have any other type conversion needs that involve a lot of boilerplate code, please feel free to raise an issue (or better yet, a PR). Maybe we can add a macro to make life easier for you and everyone else.