use syn::{parse_quote, Visibility};
pub fn vis_super(vis: &Visibility) -> Visibility {
match vis {
Visibility::Public(vis) => {
parse_quote!(#vis)
}
Visibility::Crate(vis) => {
parse_quote!(#vis)
}
Visibility::Restricted(vis) => {
if vis.path.segments[0].ident == "self" {
let path = vis.path.segments.iter().skip(1);
parse_quote!(pub(in super #(::#path)*))
} else if vis.path.segments[0].ident == "super" {
let path = &vis.path;
parse_quote!(pub(in super::#path))
} else {
parse_quote!(#vis)
}
}
Visibility::Inherited => {
parse_quote!(pub(super))
}
}
}