renvar 0.1.0

Library to deserialize environment variables in to Rust datatypes
Documentation
# Renvar

`renvar` is a library to deserialize environment variables into Rust data structures.

Huge thanks to [softprops](https://github.com/softprops) for [envy](https://github.com/softprops/envy), as this library is inspired by it
and borrows much of the code from there.

# Installation

Add it to your `Cargo.toml`

```toml
[dependencies]
renvar = "0.1"
```

# Usage

```rust
use renvar::{from_env, from_iter, from_str};
use serde::Deserialize;
use std::env;

let env_content = r#"
name=renvar
type=Library
dependencies=serde
"#;

#[derive(Debug, Deserialize, PartialEq, Eq)]
enum CrateType {
    Library,
    Binary,
}

#[derive(Debug, Deserialize, PartialEq, Eq)]
struct Renvar {
    name: String,
    #[serde(rename = "type")]
    typ: CrateType,
    dependencies: Vec<String>,
}

let actual = Renvar {
    name: "renvar".to_owned(),
    typ: CrateType::Library,
    dependencies: vec!["serde".to_owned()],
};

// we can read from strings

let value = from_str::<Renvar>(env_content).unwrap();

assert_eq!(value, actual);

// directly from the environment

let envs = vec![
    ("name".to_owned(), "renvar".to_owned()),
    ("type".to_owned(), "Library".to_owned()),
    ("dependencies".to_owned(), "serde".to_owned()),
];

for (key, value) in envs.clone().into_iter() {
    env::set_var(key, value);
}

let value = from_env::<Renvar>().unwrap();

assert_eq!(value, actual);

// or from iterables

let value = from_iter::<Renvar, _>(envs).unwrap();

assert_eq!(value, actual);
```

# Feature flags

Renvar has the following feature flags:

## prefixed

`prefixed` gives you the `prefixed` function, that accepts a prefix. The prefixes will be stripped away
before deserialization.

## postfixed

`postfix` is exactly the same as prefix, just with postfixes

# case_insensitive_prefixed

Case insensitive variant of `prefixed`

# case_insensitive_postfixed

Case insensitive variant of `postfixed`

## with_trimmer

Finally, the `with_trimmer` feature flag gives you `*_with_trimmer` variants for all of the above,
where you can strip extraneous characters off of the beginning and end of envrironment variables
by passing a closure.

## Supported datatypes

- `Strings` and `str`s
- `enums`
- `sequences`
- `Unit structs`

# Development

## Tests

If you have [just](https://github.com/casey/just), you run `just test`,
otherwise `cargo test --all-features`