agg: &'c Aggregate,
link: &'c LinkName,
end: LinkEnd,
- server_name: ServerName,
all_sections: Vec<SectionName>,
}
#[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 = (||{
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
}