use proc_macro::TokenStream;
use quote::quote;
use syn::{
parse_macro_input, ItemStruct, Visibility, FieldsNamed
};
#[proc_macro_attribute]
pub fn public_fields(_attr: TokenStream, item: TokenStream) -> TokenStream {
let mut input = parse_macro_input!(item as ItemStruct);
input.vis = Visibility::Public(Default::default());
if let syn::Fields::Named(FieldsNamed {
named: fields, ..
}) = &mut input.fields {
for field in fields.iter_mut() {
field.vis = Visibility::Public(Default::default());
}
}
let expanded = quote! { #input };
TokenStream::from(expanded)
}