mokuya 0.0.7

Generic procedural macro helpers for parsing, type analysis, and derive macro generation.
Documentation
use syn::Type;

pub fn get_function_signature(ty: &Type) -> Option<(Vec<&Type>, &Type)> {
    if let Type::Path(type_path) = ty
        && let Some(segment) = type_path.path.segments.last()
        && segment.ident == "fn"
        && let syn::PathArguments::AngleBracketed(args) = &segment.arguments
    {
        let mut args_types = Vec::new();
        for arg in args.args.iter() {
            if let syn::GenericArgument::Type(ty) = arg {
                args_types.push(ty);
            }
        }
        if args_types.is_empty() {
            return None;
        }
        let ret_type = args_types.pop().unwrap();
        return Some((args_types, ret_type));
    }
    None
}