1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use proc_macro2::Ident;
use syn::{DeriveInput, Field, Type, Visibility};

pub fn add_bolt_metadata(input: &mut DeriveInput) {
    let authority_field: Field = Field {
        attrs: vec![],
        vis: Visibility::Public(syn::VisPublic {
            pub_token: Default::default(),
        }),
        ident: Some(Ident::new("bolt_metadata", proc_macro2::Span::call_site())),
        colon_token: Some(Default::default()),
        ty: Type::Path(syn::TypePath {
            qself: None,
            path: syn::Path::from(Ident::new("BoltMetadata", proc_macro2::Span::call_site())),
        }),
    };
    if let syn::Data::Struct(ref mut data) = input.data {
        if let syn::Fields::Named(ref mut fields) = data.fields {
            fields.named.push(authority_field);
        }
    }
}