more-options 4.0.0

Provides support for options
Documentation
{{#include guide/links.md}}

# Getting Started


The simplest way to get started is to install the crate using the default features.

```bash
cargo add more-options
```

## Example


The options pattern uses structures to provide strongly typed access to groups of related settings. Options also provide
a mechanism to validate configuration data.

Let's build the ubiquitous _Hello World_ application. The first thing we need to do is define a couple of structures.

```rust
use options::Options;
use std::rc::Rc;

pub struct SpeechSettings {
    pub text: String,
    pub language: String,
}

pub struct Person {
    speech: Rc<SpeechSettings>,
}

impl Person {
    pub fn speak(&self) -> &str {
        &self.speech.text
    }
}
```

You may be wondering why you need `Rc`. In many practical applications, you'll have a group of immutable settings which
will be used in many places. `Rc` (or `Arc`) allows a single instance of settings to be shared throughout the
application. You can also use the [Ref] type alias to switch between them depending on whether the **async** feature is
enabled.

Now that we have some options, we can put it together in a simple application.

```rust
use crate::options;

fn main() {
    let options = SpeechSettings {
        text: "Hello world!".into(),
        language: "en".into(),
    };
    let person = Person { speech: options.into() };

    println!("{}", person.speak());
}
```