supply 0.3.1

Provider API for arbitrary number of lifetimes.
Documentation
use supply::prelude::*;
use supply::requests::{Req2, Req3};

struct Demo {
    a: u8,
    b: f32,
    c: bool,
}

impl<'r> Provider<'r> for Demo {
    type Lifetimes = l![];

    fn provide(&'r self, want: &mut dyn Want<Self::Lifetimes>) {
        // provide_value can be chained.
        want.provide_value(self.a)
            .provide_value(self.b)
            .provide_value(self.c);
    }
}

#[test]
fn example() {
    let demo = Demo {
        a: 3,
        b: 7.8,
        c: true,
    };

    // Request a bool, u8, and f32 from demo.
    let (bool, num, float) = demo.request::<Req3<bool, u8, f32>>();

    // We see its the same data as we put in demo.
    assert_eq!(num, Some(3));
    assert_eq!(float, Some(7.8));
    assert_eq!(bool, Some(true));
}

struct Demo2 {
    a: f32,
    b: f32,
}

impl<'r> Provider<'r> for Demo2 {
    type Lifetimes = l![];

    fn provide(&'r self, want: &mut dyn Want<Self::Lifetimes>) {
        want.provide_value(self.a).provide_value(self.b);
    }
}

#[test]
fn example_2() {
    let demo = Demo2 { a: 1.234, b: 5.678 };

    let (a, b) = demo.request::<Req2<f32, f32>>();

    assert_eq!(a, Some(1.234));
    assert_eq!(b, Some(5.678));

    let c = demo.request::<f32>();

    assert_eq!(c, Some(5.678));
}