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:
Andrea Fioraldi 2023-10-12 10:16:41 +02:00 committed by GitHub
parent 4c17da00b0
commit f6ba9de044
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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