# derive-from-one
[](https://github.com/alex35mil/derive-from-one)
[](https://crates.io/crates/derive-from-one)
[](https://docs.rs/derive-from-one)
Autogeneration of `From` impls for enums and structs.
## Installation
Add to `Cargo.toml`:
```toml
derive-from-one = "0.1"
```
## Usage
This macro generates `From` impls for enum constructors with a single field.
If you don't want some impls to be generated, apply `#[from(skip)]` to this tag.
Also, the macro would automatically skip ambiguous types, i.e., when a type appears in multiple tags regardless of amount of fields.
Example:
```rust
use derive_from_one::FromOne;
#[derive(FromOne)]
enum Enum {
A { a: u32 }, // GENERATES From impl
B(bool), // GENERATES From impl
#[from(skip)]
C(String), // DOES NOT GENERATE From impl due to #[from(skip)] attribute
D { // DOES NOT GENERATE From impl due to multiple fields
foo: Vec,
bar: &'static str,
},
E(Vec) // DOES NOT GENERATE From impl due to Vec appears in D tag
}
```
Generated code:
```rust
enum Enum {
A { a: u32 },
B(bool),
C(String),
D {
foo: Vec,
bar: &'static str,
},
E(Vec)
}
impl From for Enum {
fn from(x: u32) -> Self {
Self::A { a: x }
}
}
impl From for Enum {
fn from(x: bool) -> Self {
Self::B(x)
}
}
```
You can also apply this macro to structs with a single field.
```rust
use derive_from_one::FromOne;
#[derive(FromOne)]
struct StructOne(usize);
#[derive(FromOne)]
struct StructTwo { a: usize }
```
## License
MIT.