use syn::*;
pub(crate) fn is_type_name(x: &Type, name: &str) -> bool {
if let Type::Path(TypePath {
path: Path { segments, .. },
..
}) = x
{
if let Some(seg1) = segments.last() {
return seg1.ident == name;
}
}
false
}
pub(crate) fn unpack_option(x: &Type) -> Option<&Type> {
if let Type::Path(TypePath {
path: Path { segments, .. },
..
}) = x
{
if let Some(seg1) = segments.last() {
if seg1.ident == "Option" {
if let PathArguments::AngleBracketed(AngleBracketedGenericArguments {
args, ..
}) = &seg1.arguments
{
if let Some(GenericArgument::Type(x)) = args.first() {
return Some(x);
}
}
}
}
}
None
}
pub(crate) fn ident_string(x: &Ident) -> String {
let x = x.to_string();
match x.strip_prefix("r#") {
Some(x) => x.to_owned(),
None => x,
}
}