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>) {
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,
};
let (bool, num, float) = demo.request::<Req3<bool, u8, f32>>();
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));
}