tfsi/requirements/
require_one.rs

1use crate::provide::Provide;
2use crate::providers::ProvideBoxed;
3use crate::require::FitRequirement;
4use crate::require::Require;
5
6/// A type of `Require` that requires a single type.
7#[derive(Debug)]
8pub struct RequireOne<'p, 'd, T>(std::marker::PhantomData<(&'p (), &'d (), T)>);
9
10impl<'p, 'd, T> Require<'p, 'd> for RequireOne<'p, 'd, T>
11where
12    T: 'd,
13    'd: 'p,
14{
15    type Provider = ProvideBoxed<'p, 'd, T>;
16}
17
18impl<'p, 'd, P, T, I> FitRequirement<'p, 'd, RequireOne<'p, 'd, T>, I> for P
19where
20    P: Provide<'p, 'd, T, I>,
21    T: 'd,
22    I: 'p,
23    'd: 'p,
24{
25    fn fit_requirement(&'p self) -> <RequireOne<'p, 'd, T> as Require<'p, 'd>>::Provider {
26        ProvideBoxed::<'p, 'd, T>::create(self)
27    }
28}