chiark / gitweb /
config parsing
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 24 Jul 2021 17:27:27 +0000 (18:27 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 24 Jul 2021 17:27:27 +0000 (18:27 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/client.rs
src/config.rs

index c9fc43a2f45f4e07c6733ddca872ccd2a7276c08..d4132ea4b03b2a4b0596933329b76f3b9b305bbe 100644 (file)
@@ -6,5 +6,6 @@ use hippotat::prelude::*;
 
 #[throws(AE)]
 fn main() {
-  config::read()?;
+  let instances = config::read(LinkEnd::Client)?;
+  eprintln!("{:#?}", &instances);
 }
index a6dc722da7c51881b18f6c926d9927e3b8d1aeca..06e8cb904318f6a784fcbeaaff1a520e5d130275 100644 (file)
@@ -397,7 +397,6 @@ struct ResolveContext<'c> {
   agg: &'c Aggregate,
   link: &'c LinkName,
   end: LinkEnd,
-  server_name: ServerName,
   all_sections: Vec<SectionName>,
 }
 
@@ -591,12 +590,12 @@ impl<'c> ResolveContext<'c> {
 
   #[throws(AE)]
   pub fn special_server(&self, key: &'static str) -> ServerName {
-    self.server_name.clone()
+    self.link.server.clone()
   }
 }
 
 #[throws(AE)]
-pub fn read() {
+pub fn read(end: LinkEnd) -> Vec<InstanceConfig> {
   let opts = config::Opts::from_args();
 
   let agg = (||{
@@ -615,33 +614,34 @@ pub fn read() {
     Ok::<_,AE>(agg)
   })().context("read configuration")?;
 
-  let server_name = agg.establish_server_name()?;
-
-  let instances = agg.instances(None);
-  eprintln!("{:#?}", &instances);
-
-  let link = LinkName {
-    server: "fooxxx".parse().unwrap(),
-    client: "127.0.0.1".parse().unwrap(),
+  let server_name = match end {
+    LinkEnd::Server => Some(agg.establish_server_name()?),
+    LinkEnd::Client => None,
   };
 
-  let rctx = ResolveContext {
-    agg: &agg,
-    link: &link,
-    end: LinkEnd::Server,
-    server_name,
-    all_sections: vec![
-      SN::Link(link.clone()),
-      SN::Client(link.client.clone()),
-      SN::Server(link.server.clone()),
-      SN::Common,
-      SN::ServerLimit(link.server.clone()),
-      SN::GlobalLimit,
-    ],
-  };
+  let instances = agg.instances(server_name.as_ref());
+  let mut ics = vec![];
+
+  for link in instances {
+    let rctx = ResolveContext {
+      agg: &agg,
+      link: &link,
+      end,
+      all_sections: vec![
+        SN::Link(link.clone()),
+        SN::Client(link.client.clone()),
+        SN::Server(link.server.clone()),
+        SN::Common,
+        SN::ServerLimit(link.server.clone()),
+        SN::GlobalLimit,
+      ],
+    };
+
+    let ic = InstanceConfig::resolve_instance(&rctx)
+      .with_context(|| format!(r#"resolve config for "{:?}""#, &link))?;
 
-  let ic = InstanceConfig::resolve_instance(&rctx)
-    .context("resolve config xxx for")?;
+    ics.push(ic);
+  }
 
-  eprintln!("{:?}", &ic);
+  ics
 }