bolt_utils/
lib.rs

1use proc_macro2::Ident;
2use syn::{DeriveInput, Field, Type, Visibility};
3
4pub fn add_bolt_metadata(input: &mut DeriveInput) {
5    let authority_field: Field = Field {
6        attrs: vec![],
7        vis: Visibility::Public(syn::VisPublic {
8            pub_token: Default::default(),
9        }),
10        ident: Some(Ident::new("bolt_metadata", proc_macro2::Span::call_site())),
11        colon_token: Some(Default::default()),
12        ty: Type::Path(syn::TypePath {
13            qself: None,
14            path: syn::Path::from(Ident::new("BoltMetadata", proc_macro2::Span::call_site())),
15        }),
16    };
17    if let syn::Data::Struct(ref mut data) = input.data {
18        if let syn::Fields::Named(ref mut fields) = data.fields {
19            fields.named.push(authority_field);
20        }
21    }
22}