traverse 0.0.12

Proof-of-concept trait for internal iterators called traversals.
Documentation
use std::vec;
use {Traversal, IntoTraversal, FromTraversal, Internal};

impl<T> IntoTraversal for Vec<T> {
    type IntoTrav = Internal<vec::IntoIter<T>>;
    type Item = T;

    fn into_traversal(self) -> Self::IntoTrav {
        Internal::new(self.into_iter())
    }
}

impl<T> FromTraversal<T> for Vec<T> {
	fn from_traversal<I: IntoTraversal<Item=T>>(traversable: I) -> Self {
		let trav = traversable.into_traversal();
		let mut new = Self::with_capacity(trav.size_hint().0);
		trav.run(|elem| {
			new.push(elem);
		});
		new
	}
}

#[cfg(test)]
mod test {
    use {Traversal, IntoTraversal};

    #[test]
    fn test_basic() {
        let data = vec![1, 2, 5, 4, 6, 7];
        let traversal: Vec<usize> = data.clone().into_traversal().collect();
        assert_eq!(traversal, data);
    }

    #[test]
    fn test_zero_size() {
        let data = vec![(), (), ()];
        let traversal: Vec<()> = data.clone().into_traversal().collect();
        assert_eq!(traversal, data);
    }
}