modppl-macros 0.1.0

convenience macros for modeling with modppl.
Documentation
use syn::{Type, TypePath, PathArguments, GenericArgument};


pub fn ty_is_weak_trace_ref(ty: &Type) -> bool {
    if let Type::Path(TypePath { path, .. }) = ty {
        if path.segments.len() == 1 {
            let segment = &path.segments[0];
            if segment.ident == "Weak" {
                if let PathArguments::AngleBracketed(angle_bracketed) = &segment.arguments {
                    if angle_bracketed.args.len() == 1 {
                        if let Some(GenericArgument::Type(Type::Path(type_path))) = angle_bracketed.args.first() {
                            if type_path.path.segments.len() == 1 && type_path.path.segments[0].ident == "Trace" {
                                if let PathArguments::AngleBracketed(gen_args) = &type_path.path.segments[0].arguments {
                                    return gen_args.args.len() == 3;
                                }
                            } else if type_path.path.segments.len() == 1 && type_path.path.segments[0].ident == "DynTrace" {
                                if let PathArguments::AngleBracketed(gen_args) = &type_path.path.segments[0].arguments {
                                    return gen_args.args.len() == 2;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    false
}