chiark / gitweb /
config, wip parsing
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 24 Jul 2021 11:56:54 +0000 (12:56 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 24 Jul 2021 11:56:54 +0000 (12:56 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
macros/macros.rs
src/config.rs

index d0045f5f5fa163dbab1d76e16ab1cf8ad91416ad..593f7398e39118ccbcf040685ce805a32807a2cc 100644 (file)
@@ -32,7 +32,7 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
   let mut names = vec![];
   let mut output = vec![];
   for field in &fields.named {
-    dbg!(field);
+    //dbg!(field);
     let fname = &field.ident.as_ref().unwrap();
     let fname_span = fname.span();
     let mut skl = quote_spanned!{fname_span=> SectionKindList::Ordinary };
@@ -66,13 +66,13 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
     names.push(quote!{
       (#fname_lit, #skl),
     });
-    dbg!(&method);
+    //dbg!(&method);
     output.push(quote!{
       #fname: rctx. #method ( #fname_lit )?,
     });
-    eprintln!("{:?} method={:?} skl={:?}", field.ident, method, skl);
+    //eprintln!("{:?} method={:?} skl={:?}", field.ident, method, skl);
   }
-  dbg!(&output);
+  //dbg!(&output);
 
   let output = quote! {
     impl #target {
@@ -88,6 +88,6 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
       }
     }
   };
-  eprintln!("{}", &output);
+  //eprintln!("{}", &output);
   output.into()
 }
index e7b7783a0f5a1a76dfd94604b5fdb60a9fdbc60f..7a1f518d040c24b43a6269a017a57d0c30d0ecf3 100644 (file)
@@ -34,7 +34,6 @@ pub struct InstanceConfig {
   // Capped settings:
 */
   #[limited]    pub max_batch_down:               u32,
-/*
   #[limited]    pub max_queue_time:               Duration,
   #[limited]    pub http_timeout:                 Duration,
   #[limited]    pub target_requests_outstanding:  u32,
@@ -59,7 +58,6 @@ pub struct InstanceConfig {
   #[client]  pub http_retry:                   Duration,
   #[client]  pub url:                          Uri,
   #[client]  pub vroutes:                      Vec<CidrString>,
-*/
 }
 
 #[derive(Debug,Clone,Hash,Eq,PartialEq)]
@@ -290,6 +288,18 @@ macro_rules! parseable_from_str { ($t:ty) => {
   }
 } }
 parseable_from_str!{u32}
+parseable_from_str!{IpAddr}
+
+impl<T:Parseable> Parseable for Vec<T> {
+  #[throws(AE)]
+  fn parse(s: &Option<String>) -> Vec<T> {
+    let s = s.as_ref().ok_or_else(|| anyhow!("value needed"))?;
+    s.split_ascii_whitespace()
+      .map(|s| s.parse())
+      .collect::<Result<Vec<_>>>()?
+  }
+}
+
 
 #[derive(Debug,Copy,Clone)]
 enum SectionKindList {