use proc_macro::TokenStream;
use quote::ToTokens;
use syn::{parse_macro_input, Fields, Item, ItemStruct, Visibility};
#[allow(non_snake_case)]
#[proc_macro_attribute]
pub fn StructFields(attrs: TokenStream, input: TokenStream) -> TokenStream {
let visibility: Visibility = parse_macro_input!(attrs);
let mut input: Item = parse_macro_input!(input);
if let Item::Struct(ItemStruct { ref mut fields, .. }) = input {
match fields {
Fields::Named(fields) => {
for field in &mut fields.named {
field.vis = visibility.clone();
}
}
Fields::Unnamed(fields) => {
for field in &mut fields.unnamed {
field.vis = visibility.clone();
}
}
Fields::Unit => {}
}
}
input.into_token_stream().into()
}