enum-filter 0.1.0

Filter to a specific enum variant from an iterator
Documentation
use syn::{parse_quote, Expr, Ident, ImplItemFn, Pat, Type};

pub(crate) fn generate_def(
    name: &Ident,
    arg: &Type,
    ret: &Type,
    matcher: &Pat,
    ret_value: &Expr,
) -> ImplItemFn {
    parse_quote! {
        fn #name(self) -> std::iter::FilterMap<Self, fn(#arg) -> Option<#ret>> {
            self.filter_map(|v| {
                if let #matcher = v {
                    Some(#ret_value)
                } else {
                    None
                }
            })
        }
    }
}