@@ -209,6 +209,45 @@ where
209
209
}
210
210
}
211
211
212
+ /// Borrow each member of the tuple
213
+ pub trait SplitBorrow < ' a > {
214
+ /// The Resulting [`TupleList`], of an [`SplitBorrow::split_borrow()`] call
215
+ type SplitBorrowResult ;
216
+ /// The Resulting [`TupleList`], of an [`SplitBorrow::split_borrow_mut()`] call
217
+ type SplitBorrowMutResult ;
218
+
219
+ /// Return a tuple of borrowed references
220
+ fn split_borrow ( & ' a self ) -> Self :: SplitBorrowResult ;
221
+ /// Return a tuple of borrowed mutable references
222
+ fn split_borrow_mut ( & ' a mut self ) -> Self :: SplitBorrowMutResult ;
223
+ }
224
+
225
+ impl < ' a > SplitBorrow < ' a > for ( ) {
226
+ type SplitBorrowResult = ( ) ;
227
+ type SplitBorrowMutResult = ( ) ;
228
+
229
+ fn split_borrow ( & ' a self ) -> Self :: SplitBorrowResult { }
230
+
231
+ fn split_borrow_mut ( & ' a mut self ) -> Self :: SplitBorrowMutResult { }
232
+ }
233
+
234
+ impl < ' a , Head , Tail > SplitBorrow < ' a > for ( Head , Tail )
235
+ where
236
+ Head : ' a ,
237
+ Tail : SplitBorrow < ' a > ,
238
+ {
239
+ type SplitBorrowResult = ( & ' a Head , Tail :: SplitBorrowResult ) ;
240
+ type SplitBorrowMutResult = ( & ' a mut Head , Tail :: SplitBorrowMutResult ) ;
241
+
242
+ fn split_borrow ( & ' a self ) -> Self :: SplitBorrowResult {
243
+ ( & self . 0 , self . 1 . split_borrow ( ) )
244
+ }
245
+
246
+ fn split_borrow_mut ( & ' a mut self ) -> Self :: SplitBorrowMutResult {
247
+ ( & mut self . 0 , self . 1 . split_borrow_mut ( ) )
248
+ }
249
+ }
250
+
212
251
/// A named tuple
213
252
pub trait NamedTuple : HasConstLen {
214
253
/// Gets the name of this tuple
0 commit comments