Crate has_some

Source
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)

Traits§