tfsi/requirements/
require_one.rs1use crate::provide::Provide;
2use crate::providers::ProvideBoxed;
3use crate::require::FitRequirement;
4use crate::require::Require;
5
6#[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}