1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
//! Miscellaneous utility functions. use smallvec::SmallVec; pub mod cursor; pub mod dataflow; /// Move the lone item out of a 1-element container. pub trait Lone<T> { fn lone(self) -> T; } impl<T> Lone<T> for T { fn lone(self) -> T { self } } impl<T> Lone<T> for Vec<T> { fn lone(mut self) -> T { assert!(self.len() == 1); self.pop().unwrap() } } impl<T> Lone<T> for SmallVec<[T; 1]> { fn lone(mut self) -> T { assert!(self.len() == 1); self.pop().unwrap() } }