config-generator 0.1.2

A procedural macro for generating a configuration loader from an input struct.
Documentation
# Config Generator

A derive macro for generating boilerplate code for a configuration struct in rust.

## Installation and usage

To install this crate, add it as a dependency:

`cargo add config-generator`

Additionally, the [serde](https://crates.io/crates/serde) and [toml](https://crates.io/crates/toml) crates are required
to support loading from toml.

`cargo add serde toml`

To use, define a struct containing configuration variable that will be loaded by the generated code. `env_key` annotations define an environment variable key that will be used for loading the variable from the environment.

```rust
use config_generator::ConfigGenerator;

#[derive(ConfigGenerator, Default)]
struct Config {
  #[env_key = "NAME_ENV_KEY"]
  pub name: String,
  #[env_key = "THREAD_COUNT"]
  pub thread_count: u32,
  #[env_key = "ALLOWED_ORIGINS"]
  pub allowed_origins: Vec<String>,
  #[env_key = "ASSETS_PATH"]
  pub assets_path: Option<String>,
}
```

The resulting implementations will allow a config to be loaded from a toml file, the environment, or both, with loaded variables overwriting previously set ones. Note that you will need to implement a way to get some starting state for your config (probably either defining a `new` method or deriving `Default` as above).

```rust
// Loads a default config first from a toml file,
// then overlays environment variable values.
let config = Config::default()
  .with_toml("path/to/config.toml")
  .with_environment();
```

## Acknowledgements

This macro is inspired by a use-case for the [optional_struct](https://crates.io/crates/optional_struct) macro, which also doubles as a very useful resource for those wishing to learn about writing procedural macros in rust.