coremem_types: list: simplify the IntoList trait
This commit is contained in:
@@ -62,41 +62,36 @@ impl<E0, E1, E2, E3, T> Indexable<P3> for Node<E0, Node<E1, Node<E2, Node<E3, T>
|
||||
}
|
||||
|
||||
pub trait IntoList {
|
||||
type Head;
|
||||
type Tail;
|
||||
fn into_list(self) -> Node<Self::Head, Self::Tail>;
|
||||
type List;
|
||||
fn into_list(self) -> Self::List;
|
||||
}
|
||||
|
||||
pub type List<Args> = Node<<Args as IntoList>::Head, <Args as IntoList>::Tail>;
|
||||
pub type List<Args> = <Args as IntoList>::List;
|
||||
|
||||
impl<E0> IntoList for (E0,) {
|
||||
type Head = E0;
|
||||
type Tail = Null;
|
||||
fn into_list(self) -> Node<Self::Head, Self::Tail> {
|
||||
type List = Node<E0, Null>;
|
||||
fn into_list(self) -> Self::List {
|
||||
Node::new(self.0, Null)
|
||||
}
|
||||
}
|
||||
|
||||
impl<E0, E1> IntoList for (E0, E1) {
|
||||
type Head = E0;
|
||||
type Tail = Node<E1, Null>;
|
||||
fn into_list(self) -> Node<Self::Head, Self::Tail> {
|
||||
type List = Node<E0, <(E1,) as IntoList>::List>;
|
||||
fn into_list(self) -> Self::List {
|
||||
Node::new(self.0, (self.1,).into_list())
|
||||
}
|
||||
}
|
||||
|
||||
impl<E0, E1, E2> IntoList for (E0, E1, E2) {
|
||||
type Head = E0;
|
||||
type Tail = Node<E1, Node<E2, Null>>;
|
||||
fn into_list(self) -> Node<Self::Head, Self::Tail> {
|
||||
type List = Node<E0, <(E1, E2) as IntoList>::List>;
|
||||
fn into_list(self) -> Self::List {
|
||||
Node::new(self.0, (self.1, self.2).into_list())
|
||||
}
|
||||
}
|
||||
|
||||
impl<E0, E1, E2, E3> IntoList for (E0, E1, E2, E3) {
|
||||
type Head = E0;
|
||||
type Tail = Node<E1, Node<E2, Node<E3, Null>>>;
|
||||
fn into_list(self) -> Node<Self::Head, Self::Tail> {
|
||||
type List = Node<E0, <(E1, E2, E3) as IntoList>::List>;
|
||||
fn into_list(self) -> Self::List {
|
||||
Node::new(self.0, (self.1, self.2, self.3).into_list())
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user