From: Ian Jackson Date: Sat, 24 Jul 2021 17:27:27 +0000 (+0100) Subject: config parsing X-Git-Tag: hippotat/1.0.0~468 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=1770e410d916c9baba93aec32e2a0bb26479d68f;p=hippotat.git config parsing Signed-off-by: Ian Jackson --- diff --git a/src/bin/client.rs b/src/bin/client.rs index c9fc43a..d4132ea 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -6,5 +6,6 @@ use hippotat::prelude::*; #[throws(AE)] fn main() { - config::read()?; + let instances = config::read(LinkEnd::Client)?; + eprintln!("{:#?}", &instances); } diff --git a/src/config.rs b/src/config.rs index a6dc722..06e8cb9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -397,7 +397,6 @@ struct ResolveContext<'c> { agg: &'c Aggregate, link: &'c LinkName, end: LinkEnd, - server_name: ServerName, all_sections: Vec, } @@ -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 { 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 }