An open API service indexing awesome lists of open source software.

https://github.com/lu-zero/arg_enum_proc_macro

clap.rs arg_enum made procedural
https://github.com/lu-zero/arg_enum_proc_macro

Last synced: 8 months ago
JSON representation

clap.rs arg_enum made procedural

Awesome Lists containing this project

README

          

# Procedural macro derive that mimics `arg_enum!` from [clap](https://clap.rs)

![Crates.io](https://img.shields.io/crates/v/arg_enum_proc_macro)
![docs.rs](https://docs.rs/mio/badge.svg)
[![dependency status](https://deps.rs/repo/github/lu-zero/arg_enum_proc_macro/status.svg)](https://deps.rs/repo/github/lu-zero/arg_enum_proc_macro)

## Usage

In `Cargo.toml`:
``` toml
[dependencies]
arg_enum_proc_macro = "0.3"
```

In the rust code:
``` rust
use arg_enum_proc_macro::ArgEnum;

/// All the possible states of Foo
#[derive(ArgEnum)]
pub enum Foo {
/// Initial state
Unk,
/// Foo is on
On,
/// Foo is off
Off,
}
```

### Aliases

It is possible to express an alias using the attribute `arg_enum(alias = "AliasVariant")`.
The `FromStr` will map the "AliasVariant" string to the decorated enum variant:

``` rust
/// All the possible states of Foo
#[derive(ArgEnum)]
pub enum Foo {
/// Initial state
Unk,
/// Foo is on
#[arg_enum(alias = "Up")]
On,
/// Foo is off
#[arg_enum(alias = "Down")]
Off,
}
```