&opts.config, &opts.log, |_, ics|
{
PrintConfigOpt(&opts.print_config)
- .implement(&ics, )?;
-
+ .implement(ics, )?;
+ Ok(())
+ }, |_, ics| {
Ok((ics,))
});
"hippotatd", LinkEnd::Server,
&opts.config, &opts.log, |server_name, ics|
{
- let global_config = config::InstanceConfigGlobal::from(&ics);
let server_name = server_name.expect("LinkEnd::Server didn't do its job");
+ let pc = PrintConfigOpt(&opts.print_config);
+
+ if ics.is_empty() {
+ pc.implement(ics)?;
+ return Ok(None);
+ }
- {
- let pc = PrintConfigOpt(&opts.print_config);
- let gc = (&server_name, &global_config);
+ let global_config = config::InstanceConfigGlobal::from(&ics);
+ let gc = (&server_name, &global_config);
- if pc.keys().all(|k| gc.inspect_key(k).is_some()) {
- pc.implement([&gc])?;
- } else {
- pc.implement(&ics)?;
- }
+ if pc.keys().all(|k| gc.inspect_key(k).is_some()) {
+ pc.implement([&gc])?;
+ } else {
+ pc.implement(ics)?;
}
+ Ok(Some(global_config))
+
+ }, |global_config, ics| {
+
+ let global_config = global_config.expect("some instances");
+
if let Some(pidfile_path) = opts.pidfile.as_ref() {
(||{
let mut pidfile = fs::File::create(pidfile_path).context("create")?;
(server_name, ics)
}
-pub fn startup<F,T>(progname: &str, end: LinkEnd,
+pub fn startup<F,T,G,U>(progname: &str, end: LinkEnd,
opts: &Opts, logopts: &LogOpts,
- f: F) -> T
- where F: FnOnce(Option<ServerName>, Vec<InstanceConfig>) -> Result<T,AE>
+ f: F, g: G) -> U
+where F: FnOnce(Option<ServerName>, &[InstanceConfig]) -> Result<T,AE>,
+ G: FnOnce(T, Vec<InstanceConfig>) -> Result<U,AE>,
{
(||{
dedup_eyre_setup()?;
let (server_name, ics) = config::read(opts, end)?;
+
+ let t = f(server_name, &ics)?;
if ics.is_empty() { throw!(anyhow!("no associations, quitting")); }
logopts.log_init()?;
- let t = f(server_name, ics)?;
+ let u = g(t, ics)?;
- Ok::<_,AE>(t)
+ Ok::<_,AE>(u)
})().unwrap_or_else(|e| {
eprintln!("{}: startup error: {}", progname, &e);
process::exit(8);