#![forbid(unsafe_code)]
#![allow(nonstandard_style, unused_imports)]
#![cfg_attr(feature = "nightly",
cfg_attr(all(), doc = include_str!("../README.md")),
)]
extern crate proc_macro;
use ::proc_macro::TokenStream;
use ::proc_macro2::{Span, TokenStream as TokenStream2};
use ::quote::{
quote,
quote_spanned,
ToTokens,
};
use ::syn::{*,
parse::Parse,
Result,
};
#[proc_macro_attribute] pub
fn make (attrs: TokenStream, input: TokenStream)
-> TokenStream
{
let visibility: Visibility = parse_macro_input!(attrs);
let mut input: Item = parse_macro_input!(input);
match input {
| Item::Const(ItemConst { ref mut vis, .. }) => *vis = visibility,
| Item::Enum(ItemEnum { ref mut vis, .. }) => *vis = visibility,
| Item::ExternCrate(ItemExternCrate { ref mut vis, .. }) => *vis = visibility,
| Item::Fn(ItemFn { ref mut vis, .. }) => *vis = visibility,
| Item::Mod(ItemMod { ref mut vis, .. }) => *vis = visibility,
| Item::Static(ItemStatic { ref mut vis, .. }) => *vis = visibility,
| Item::Struct(ItemStruct { ref mut vis, .. }) => *vis = visibility,
| Item::Trait(ItemTrait { ref mut vis, .. }) => *vis = visibility,
| Item::TraitAlias(ItemTraitAlias { ref mut vis, .. }) => *vis = visibility,
| Item::Type(ItemType { ref mut vis, .. }) => *vis = visibility,
| Item::Union(ItemUnion { ref mut vis, .. }) => *vis = visibility,
| Item::Use(ItemUse { ref mut vis, .. }) => *vis = visibility,
| _ => return Error::new_spanned(
&input,
"Cannot override the `#[visibility]` of this item",
).to_compile_error().into(),
}
input.into_token_stream().into()
}