envbind 0.1.0

Typed environment binding primitives for Rust services.
Documentation
#![allow(missing_docs)]

use envbind::{BindError, Binder, Binding, Environment, MapEnvironment};

struct EchoBinding;

impl Binding<String> for EchoBinding {
    fn bind<E: Environment>(&self, environment: &E) -> Result<String, BindError> {
        environment
            .get("NAME")
            .map_err(|source| BindError::environment("NAME", source))?
            .ok_or_else(|| BindError::missing("NAME"))
    }
}

#[test]
fn binder_returns_underlying_environment() {
    let value = Binder::new(MapEnvironment::from_pairs([("NAME", "api")]))
        .environment()
        .get("NAME");

    assert_eq!(value, Ok(Some("api".to_owned())));
}

#[test]
fn binder_delegates_to_binding_spec() {
    let value = Binder::new(MapEnvironment::from_pairs([("NAME", "api")])).bind(&EchoBinding);

    assert_eq!(value, Ok("api".to_owned()));
}