getargs-derive 0.1.0

Clap-style #[derive] command-line argument parser for no_std and embedded Rust: zero allocation, compile-time help, subcommands. Built on getargs.
Documentation
# Default Values

Use `default_value = "..."` when the default is most naturally written as command-line text, and `default_value_t = expr` when it is a typed value:

```rust
use getargs_derive::GetArgs;

#[derive(GetArgs)]
struct Server<'a> {
    #[arg(long, default_value = "127.0.0.1")]
    host: &'a str,
    #[arg(short, long, default_value = "8080")]
    port: u16,
    #[arg(short, long, default_value_t = 4)]
    workers: u32,
}

# fn main() -> Result<(), getargs_derive::Error<'static>> {
let server = Server::from_args(["-p", "3000"].into_iter())?;
assert_eq!(server.host, "127.0.0.1");
assert_eq!(server.port, 3000);
assert_eq!(server.workers, 4);
# Ok(())
# }
```

A `default_value` string is only parsed when the argument is absent; if it does not parse, `parse` returns `Error::InvalidValue`.
A field may have at most one default.

Arguments without a default are required, unless they are `Option<T>`. Positional arguments with a default are optional, and must come after all required positional arguments:

```rust
use getargs_derive::GetArgs;

#[derive(GetArgs)]
struct Copy<'a> {
    source: &'a str,
    #[arg(default_value = "out.txt")]
    destination: &'a str,
}

# fn main() -> Result<(), getargs_derive::Error<'static>> {
let copy = Copy::from_args(["in.txt"].into_iter())?;
assert_eq!(copy.destination, "out.txt");
# Ok(())
# }
```

In the generated help, defaults are shown as `[default: value]`, except on flags. See [Generated Help][guide-help].

## Compile-Time Diagnostics

The macro reports a compile error, pointing at the offending attribute or field, for:

- more than one default on the same field, or any default on an `Option<T>` field.

[guide-help]: help.md