@@ -20,112 +20,76 @@ where
20
20
fn into_async_subscription_callback ( self ) -> AnySubscriptionCallback < T , ( ) > ;
21
21
}
22
22
23
- // We need one implementation per arity. This was inspired by Bevy's systems.
24
- impl < T , A0 , Out , Func > IntoAsyncSubscriptionCallback < T , ( A0 , ) > for Func
25
- where
26
- T : Message ,
27
- ( A0 , ) : SubscriptionAsyncArgs < T , Func > ,
28
- Out : Future < Output = ( ) > + Send + ' static ,
29
- Func : FnMut ( A0 ) -> Out + Send + ' static ,
30
- {
31
- fn into_async_subscription_callback ( self ) -> AnySubscriptionCallback < T , ( ) > {
32
- <( A0 , ) as SubscriptionAsyncArgs < T , Func > >:: into_any_callback ( self )
33
- }
34
- }
35
-
36
- impl < T , A0 , A1 , Out , Func > IntoAsyncSubscriptionCallback < T , ( A0 , A1 ) > for Func
37
- where
38
- T : Message ,
39
- ( A0 , A1 ) : SubscriptionAsyncArgs < T , Func > ,
40
- Out : Future < Output = ( ) > + Send + ' static ,
41
- Func : FnMut ( A0 , A1 ) -> Out + Send + ' static ,
42
- {
43
- fn into_async_subscription_callback ( self ) -> AnySubscriptionCallback < T , ( ) > {
44
- <( A0 , A1 ) as SubscriptionAsyncArgs < T , Func > >:: into_any_callback ( self )
45
- }
46
- }
47
-
48
- /// Helper trait for SubscriptionCallback.
49
- ///
50
- /// For each tuple of args, it provides conversion from a function with
51
- /// these args to the correct enum variant.
52
- trait SubscriptionAsyncArgs < T , Func >
53
- where
54
- T : Message ,
55
- {
56
- fn into_any_callback ( func : Func ) -> AnySubscriptionCallback < T , ( ) > ;
57
- }
58
-
59
- impl < T , Out , Func > SubscriptionAsyncArgs < T , Func > for ( T , )
23
+ impl < T , Out , Func > IntoAsyncSubscriptionCallback < T , ( T , ) > for Func
60
24
where
61
25
T : Message ,
62
26
Func : FnMut ( T ) -> Out + Send + ' static ,
63
27
Out : Future < Output = ( ) > + Send + ' static ,
64
28
{
65
- fn into_any_callback ( mut func : Func ) -> AnySubscriptionCallback < T , ( ) > {
66
- NodeSubscriptionCallback :: Regular ( Box :: new ( move |message| Box :: pin ( func ( message) ) ) ) . into ( )
29
+ fn into_async_subscription_callback ( mut self ) -> AnySubscriptionCallback < T , ( ) > {
30
+ NodeSubscriptionCallback :: Regular ( Box :: new ( move |message| Box :: pin ( self ( message) ) ) ) . into ( )
67
31
}
68
32
}
69
33
70
- impl < T , Out , Func > SubscriptionAsyncArgs < T , Func > for ( T , MessageInfo )
34
+ impl < T , Out , Func > IntoAsyncSubscriptionCallback < T , ( T , MessageInfo ) > for Func
71
35
where
72
36
T : Message ,
73
37
Func : FnMut ( T , MessageInfo ) -> Out + Send + ' static ,
74
38
Out : Future < Output = ( ) > + Send + ' static ,
75
39
{
76
- fn into_any_callback ( mut func : Func ) -> AnySubscriptionCallback < T , ( ) > {
40
+ fn into_async_subscription_callback ( mut self ) -> AnySubscriptionCallback < T , ( ) > {
77
41
NodeSubscriptionCallback :: RegularWithMessageInfo ( Box :: new ( move |message, info| {
78
- Box :: pin ( func ( message, info) )
42
+ Box :: pin ( self ( message, info) )
79
43
} ) )
80
44
. into ( )
81
45
}
82
46
}
83
47
84
- impl < T , Out , Func > SubscriptionAsyncArgs < T , Func > for ( Box < T > , )
48
+ impl < T , Out , Func > IntoAsyncSubscriptionCallback < T , ( Box < T > , ) > for Func
85
49
where
86
50
T : Message ,
87
51
Func : FnMut ( Box < T > ) -> Out + Send + ' static ,
88
52
Out : Future < Output = ( ) > + Send + ' static ,
89
53
{
90
- fn into_any_callback ( mut func : Func ) -> AnySubscriptionCallback < T , ( ) > {
91
- NodeSubscriptionCallback :: Boxed ( Box :: new ( move |message| Box :: pin ( func ( message) ) ) ) . into ( )
54
+ fn into_async_subscription_callback ( mut self ) -> AnySubscriptionCallback < T , ( ) > {
55
+ NodeSubscriptionCallback :: Boxed ( Box :: new ( move |message| Box :: pin ( self ( message) ) ) ) . into ( )
92
56
}
93
57
}
94
58
95
- impl < T , F , Func > SubscriptionAsyncArgs < T , Func > for ( Box < T > , MessageInfo )
59
+ impl < T , F , Func > IntoAsyncSubscriptionCallback < T , ( Box < T > , MessageInfo ) > for Func
96
60
where
97
61
T : Message ,
98
62
Func : FnMut ( Box < T > , MessageInfo ) -> F + Send + ' static ,
99
63
F : Future < Output = ( ) > + Send + ' static ,
100
64
{
101
- fn into_any_callback ( mut func : Func ) -> AnySubscriptionCallback < T , ( ) > {
65
+ fn into_async_subscription_callback ( mut self ) -> AnySubscriptionCallback < T , ( ) > {
102
66
NodeSubscriptionCallback :: BoxedWithMessageInfo ( Box :: new ( move |message, info| {
103
- Box :: pin ( func ( message, info) )
67
+ Box :: pin ( self ( message, info) )
104
68
} ) )
105
69
. into ( )
106
70
}
107
71
}
108
72
109
- impl < T , F , Func > SubscriptionAsyncArgs < T , Func > for ( ReadOnlyLoanedMessage < T > , )
73
+ impl < T , F , Func > IntoAsyncSubscriptionCallback < T , ( ReadOnlyLoanedMessage < T > , ) > for Func
110
74
where
111
75
T : Message ,
112
76
Func : FnMut ( ReadOnlyLoanedMessage < T > ) -> F + Send + ' static ,
113
77
F : Future < Output = ( ) > + Send + ' static ,
114
78
{
115
- fn into_any_callback ( mut func : Func ) -> AnySubscriptionCallback < T , ( ) > {
116
- NodeSubscriptionCallback :: Loaned ( Box :: new ( move |message| Box :: pin ( func ( message) ) ) ) . into ( )
79
+ fn into_async_subscription_callback ( mut self ) -> AnySubscriptionCallback < T , ( ) > {
80
+ NodeSubscriptionCallback :: Loaned ( Box :: new ( move |message| Box :: pin ( self ( message) ) ) ) . into ( )
117
81
}
118
82
}
119
83
120
- impl < T , F , Func > SubscriptionAsyncArgs < T , Func > for ( ReadOnlyLoanedMessage < T > , MessageInfo )
84
+ impl < T , F , Func > IntoAsyncSubscriptionCallback < T , ( ReadOnlyLoanedMessage < T > , MessageInfo ) > for Func
121
85
where
122
86
T : Message ,
123
87
Func : FnMut ( ReadOnlyLoanedMessage < T > , MessageInfo ) -> F + Send + ' static ,
124
88
F : Future < Output = ( ) > + Send + ' static ,
125
89
{
126
- fn into_any_callback ( mut func : Func ) -> AnySubscriptionCallback < T , ( ) > {
90
+ fn into_async_subscription_callback ( mut self ) -> AnySubscriptionCallback < T , ( ) > {
127
91
NodeSubscriptionCallback :: LoanedWithMessageInfo ( Box :: new ( move |message, info| {
128
- Box :: pin ( func ( message, info) )
92
+ Box :: pin ( self ( message, info) )
129
93
} ) )
130
94
. into ( )
131
95
}
0 commit comments