tfsi/components/
component_pair.rs1use crate::component::Component;
2use crate::require::Require;
3
4#[derive(Debug)]
5pub struct IdxLeft<I>(std::marker::PhantomData<I>);
6#[derive(Debug)]
7pub struct IdxRight<I>(std::marker::PhantomData<I>);
8
9#[derive(Debug, Clone)]
13pub struct ComponentPair<Left, Right> {
14 left: Left,
15 right: Right,
16}
17
18impl<Left, Right> ComponentPair<Left, Right> {
19 pub fn into_inner(self) -> (Left, Right) {
21 (self.left, self.right)
22 }
23}
24
25impl<Left, Right> From<(Left, Right)> for ComponentPair<Left, Right> {
26 fn from(pair: (Left, Right)) -> Self {
27 let (left, right) = pair;
28 Self { left, right }
29 }
30}
31
32impl<'p, 'd, T, I, Left, Right> Component<'p, 'd, T, IdxLeft<I>> for ComponentPair<Left, Right>
33where
34 Left: Component<'p, 'd, T, I>,
35{
36 type Requirement = Left::Requirement;
37
38 fn component_provide(&'p self, deps: &<Self::Requirement as Require<'p, 'd>>::Provider) -> T {
39 self.left.component_provide(deps)
40 }
41}
42
43impl<'p, 'd, T, I, Left, Right> Component<'p, 'd, T, IdxRight<I>> for ComponentPair<Left, Right>
44where
45 Right: Component<'p, 'd, T, I>,
46{
47 type Requirement = Right::Requirement;
48
49 fn component_provide(&'p self, deps: &<Self::Requirement as Require<'p, 'd>>::Provider) -> T {
50 self.right.component_provide(deps)
51 }
52}