# Jealousy
Jealousy is a simple wrapper trait around the [envy](https://crates.io/crates/envy) crate.
The envy crate allows for easy deserialization of any structure from the environment.
This crate adds the following features on top of that:

- `FromEnv` trait that can be implemented on any deserializable struct
- Logging surrounding the envy crate and errors, for easier debugging
- derive macro (behind `derive` feature) to not have to write the boilerplate

## Installation
You can either use `cargo add jealousy` or 
add `jealousy = "0.1.2"` to the dependencies in your Cargo.toml.

### features
- `derive` Allows for using the derive macro instead of having to implement the trait

## Usage
The default impl of from_env should be enough for most use cases.
The following will deserialize the struct's fields from the following environment variables: 
- `CONFIG_VAR1`
- `CONFIG_VAR2`

Both methods, the trait AND the derive macro, use the default impl of the from_env method.

### Trait
```rust
use serde::Deserialize;
use jealousy::FromEnv;

#[derive(Deserialize)]
struct Config {
    var1: String,
    var2: u16,
}

impl FromEnv for Config {
    const PREFIX: &'static str = "CONFIG";
}
```

### Derive _(requires feature: `derive`)_
The derive macro mainly prevents the boilerplate you see above.
It is functionally identical in every other way.

```rust
use serde::Deserialize;
use jealousy::FromEnv;

#[derive(Deserialize)]
#[from_env(prefix = "CONFIG")]
struct Config {
    var1: String,
    var2: u16,
}
```

