Add SplitBorrow trait to split borrow tuple_list elements (#1624)
* Add SplitBorrow trait to split borrow tuple_list elements * clippy
This commit is contained in:
parent
4c17da00b0
commit
f6ba9de044
@ -209,6 +209,45 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
/// Borrow each member of the tuple
|
||||
pub trait SplitBorrow<'a> {
|
||||
/// The Resulting [`TupleList`], of an [`SplitBorrow::split_borrow()`] call
|
||||
type SplitBorrowResult;
|
||||
/// The Resulting [`TupleList`], of an [`SplitBorrow::split_borrow_mut()`] call
|
||||
type SplitBorrowMutResult;
|
||||
|
||||
/// Return a tuple of borrowed references
|
||||
fn split_borrow(&'a self) -> Self::SplitBorrowResult;
|
||||
/// Return a tuple of borrowed mutable references
|
||||
fn split_borrow_mut(&'a mut self) -> Self::SplitBorrowMutResult;
|
||||
}
|
||||
|
||||
impl<'a> SplitBorrow<'a> for () {
|
||||
type SplitBorrowResult = ();
|
||||
type SplitBorrowMutResult = ();
|
||||
|
||||
fn split_borrow(&'a self) -> Self::SplitBorrowResult {}
|
||||
|
||||
fn split_borrow_mut(&'a mut self) -> Self::SplitBorrowMutResult {}
|
||||
}
|
||||
|
||||
impl<'a, Head, Tail> SplitBorrow<'a> for (Head, Tail)
|
||||
where
|
||||
Head: 'a,
|
||||
Tail: SplitBorrow<'a>,
|
||||
{
|
||||
type SplitBorrowResult = (&'a Head, Tail::SplitBorrowResult);
|
||||
type SplitBorrowMutResult = (&'a mut Head, Tail::SplitBorrowMutResult);
|
||||
|
||||
fn split_borrow(&'a self) -> Self::SplitBorrowResult {
|
||||
(&self.0, self.1.split_borrow())
|
||||
}
|
||||
|
||||
fn split_borrow_mut(&'a mut self) -> Self::SplitBorrowMutResult {
|
||||
(&mut self.0, self.1.split_borrow_mut())
|
||||
}
|
||||
}
|
||||
|
||||
/// A named tuple
|
||||
pub trait NamedTuple: HasConstLen {
|
||||
/// Gets the name of this tuple
|
||||
|
Loading…
x
Reference in New Issue
Block a user