Expand description
A very simple trait that relieves a tiresome thing about using iterator filters and other
“not is_empty” contexts:
let vector = vec!["some_data".to_owned(), "".to_owned(), "more data".to_owned(), "".to_owned()];
let vector2 = vector.clone();
// If you want the empties, you can do
let empties = vector.into_iter().filter(String::is_empty).collect::<Vec<String>>();
assert_eq!(["", ""], empties.as_slice());
// But If you want the non-empties, you have to do this
let non_empties = vector2.into_iter().filter(|v| !v.is_empty()).collect::<Vec<String>>();
assert_eq!(["some_data", "more data"], non_empties.as_slice());And there are other situations where !T.is_empty() obfuscates things.
So this brings a tiny bit more sanity to the game, allowing for:
use has_some::HasSome;
let vector = vec!["some_data".to_owned(), "".to_owned(), "more data".to_owned(), "".to_owned()];
let vector2 = vector.clone();
// If you want the empties, you can do
let empties = vector.into_iter().filter(String::is_empty).collect::<Vec<String>>();
assert_eq!(["", ""], empties.as_slice());
// Now If you want the non-empties, you can do
let non_empties = vector2.into_iter().filter(String::has_some).collect::<Vec<String>>();
assert_eq!(["some_data", "more data"], non_empties.as_slice());(Note that this doesn’t help with iterators whose Item type is a reference - is_empty
as a function reference to filter has never worked in those situations)