chiark / gitweb /
Config inspection: impl InspectableConfig for InstanceConfig
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 9 Jan 2023 18:57:30 +0000 (18:57 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 11 Jan 2023 02:12:41 +0000 (02:12 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
macros/macros.rs

index 341edb223e1ff9b98e6f7f318ac724dcd7655bd4..4303f00ef1282ad884414633813fd058684c0b80 100644 (file)
@@ -91,6 +91,7 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
   let mut global_fields = vec![];
   let mut global_assignments = vec![];
   let mut g_inspects = vec![];
+  let mut t_inspects = vec![];
   for field in &fields.named {
     //dbg!(field);
     let fname = &field.ident.as_ref().unwrap();
@@ -112,6 +113,7 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
         let inspect = quote!{
           #fname_lit => &self.#fname,
         };
+        t_inspects.push(inspect.clone());
         if attr.path == parse_quote!{ per_client } {
           set_skl(quote_spanned!{fname_span=> SectionKindList::PerClient });
           continue;
@@ -181,6 +183,7 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
     }
   };
   let g_inspects = mk_inspects(&global, g_inspects);
+  let t_inspects = mk_inspects(&target, t_inspects);
 
   let output = quote! {
     impl #target {
@@ -196,6 +199,8 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
       }
     }
 
+    #t_inspects
+
     #[derive(Debug)]
     pub struct #global {
       #( #global_fields ),*