pub fn lines<E>(path: impl IntoIterator<Item = E>) -> impl Iterator<Item = [E; 2]>
where
E: Copy
{
let path = path.into_iter()
.collect::<Vec<_>>();
path.last()
.copied()
.map(|mut prev| path.into_iter()
.map(move |edge| [core::mem::replace(&mut prev, edge), edge])
).into_iter()
.flatten()
}
pub fn lines_disconnected<E>(path: impl IntoIterator<Item = E>) -> impl Iterator<Item = [E; 2]>
where
E: Copy
{
let mut path = path.into_iter();
path.next()
.map(|mut prev| path.into_iter()
.map(move |edge| [core::mem::replace(&mut prev, edge), edge])
).into_iter()
.flatten()
}