pub trait ToOptionVecString {
fn to_option_vec_string(self) -> Option<Vec<String>>;
}
impl<T: ToOptionVecString + Clone> ToOptionVecString for &T {
fn to_option_vec_string(self) -> Option<Vec<String>> {
self.clone().to_option_vec_string()
}
}
impl ToOptionVecString for String {
fn to_option_vec_string(self) -> Option<Vec<String>> {
Some(vec![self])
}
}
impl ToOptionVecString for &str {
fn to_option_vec_string(self) -> Option<Vec<String>> {
Some(vec![self.to_string()])
}
}
impl<T: ToOptionVecString> ToOptionVecString for Option<T> {
fn to_option_vec_string(self) -> Option<Vec<String>> {
self.and_then(ToOptionVecString::to_option_vec_string)
}
}
impl<T: ToOptionVecString> ToOptionVecString for Vec<T> {
fn to_option_vec_string(self) -> Option<Vec<String>> {
let classes = self
.into_iter()
.filter_map(ToOptionVecString::to_option_vec_string)
.flatten();
Some(classes.collect())
}
}
impl<T: ToOptionVecString + Clone> ToOptionVecString for &[T] {
fn to_option_vec_string(self) -> Option<Vec<String>> {
let classes = self
.iter()
.filter_map(ToOptionVecString::to_option_vec_string)
.flatten();
Some(classes.collect())
}
}