chiark / gitweb /
print config value
[hippotat.git] / macros / macros.rs
index 1a158a7d10824e063a94c9189bad2ab19b61299d..22b778dd662bd724e4ce02f687f047e6794ec312 100644 (file)
@@ -83,6 +83,8 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
   for field in &fields.named {
     //dbg!(field);
     let fname = &field.ident.as_ref().unwrap();
+    let fname_string = fname.to_string();
+    let fname_lit = Literal::string( &fname_string );
     let ty = &field.ty;
     let fname_span = fname.span();
     let skl = RefCell::new(None);
@@ -109,6 +111,9 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
             #fname: <#ty as ResolveGlobal>::resolve
                     (l.iter().map(|e| &e.#fname)),
           ));
+          inspects.push(quote!{
+            #fname_lit => &self.#fname,
+          });
           continue;
         }
         method = attr.path.to_token_stream();
@@ -135,8 +140,6 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
         *skl.borrow_mut() = Some(get_path(tskl));
       }
     }
-    let fname_string = fname.to_string();
-    let fname_lit = Literal::string( &fname_string );
     let skl = skl.into_inner()
       .expect(&format!("SKL not specified! (field {})!", fname));
 
@@ -147,9 +150,6 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
     output.push(quote!{
       #fname: rctx. #method ( #fname_lit, #skl )?,
     });
-    inspects.push(quote!{
-      #fname_lit => &self.#fname,
-    });
     //eprintln!("{:?} method={:?} skl={:?}", field.ident, method, skl);
   }
   //dbg!(&output);
@@ -169,14 +169,6 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
           #( #output )*
         })
       }
-
-      pub fn inspect_key(&self, field: &'_ str)
-                         -> Option<&dyn InspectableConfigValue> {
-        Some(match field {
-          #( #inspects )*
-          _ => return None,
-        })
-      }
     }
 
     #[derive(Debug)]
@@ -188,6 +180,14 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
       pub fn from(l: &[#top_ident]) -> #global { #global {
         #( #global_assignments )*
       } }
+
+      pub fn inspect_key(&self, field: &'_ str)
+                         -> Option<&dyn InspectableConfigValue> {
+        Some(match field {
+          #( #inspects )*
+          _ => return None,
+        })
+      }
     }
   };