From 11c44ebd778e9a379c1ead8c1d5bc96fc9f04236 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 31 May 2021 11:55:32 +0100 Subject: [PATCH] otter cli: Prep for new kind of server connection Signed-off-by: Ian Jackson --- src/bin/otter.rs | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/bin/otter.rs b/src/bin/otter.rs index a5023851..ede4e0db 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -61,6 +61,12 @@ impl<'x, T, F: FnMut(&str) -> Result> } } +#[derive(Debug)] +enum ServerLocation { + LocalSocketPath(String), +} +use ServerLocation as SL; + #[derive(Debug)] struct MainOpts { account: AccountName, @@ -68,7 +74,7 @@ struct MainOpts { timezone: Option, layout: Option, access: Option, - socket_path: String, + server: ServerLocation, verbose: i32, superuser: bool, spec_dir: String, @@ -296,7 +302,7 @@ fn main() { #[derive(Default,Debug)] struct RawMainArgs { account: Option, - socket_path: Option, + server: Option, nick: Option, timezone: Option, layout: Option, @@ -376,9 +382,13 @@ fn main() { StoreConst(Some(PlayerAccessUnset.into())), "do not show game access info (for testing only)"); - ap.refer(&mut rma.socket_path) - .add_option(&["--socket"], StoreOption, - "specify server socket path"); + let mut server = ap.refer(&mut rma.server); + server + .add_option(&["--socket"], + MapStore(|path| Ok(Some( + SL::LocalSocketPath(path.to_string()) + ))), + "connect to server via this socket socket path"); ap.refer(&mut rma.config_filename) .add_option(&["-C","--config"], StoreOption, "specify server config file (used for finding socket)"); @@ -399,7 +409,7 @@ fn main() { ap }, &|RawMainArgs { account, nick, timezone, - access, socket_path, verbose, config_filename, superuser, + access, server, verbose, config_filename, superuser, subcommand, subargs, spec_dir, layout, game, }|{ env_logger::Builder::new() @@ -447,11 +457,11 @@ fn main() { }) })?; - let socket_path = socket_path.map(Ok::<_,APE>).unwrap_or_else(||{ - Ok( + let server = server.map(Ok::<_,APE>).unwrap_or_else(||{ + Ok(SL::LocalSocketPath( config.clone()?.0 .command_socket.clone() - ) + )) })?; Ok((subcommand, subargs, MainOpts { account, @@ -459,7 +469,7 @@ fn main() { nick, timezone, layout, - socket_path, + server, verbose, superuser, spec_dir, @@ -550,7 +560,9 @@ impl Conn { #[throws(E)] fn connect(ma: &MainOpts) -> Conn { - let chan = MgmtChannel::connect(&ma.socket_path)?; + let chan = match &ma.server { + SL::LocalSocketPath(socket) => MgmtChannel::connect(socket)?, + }; let mut chan = Conn { chan }; if ma.superuser { chan.cmd(&MC::SetSuperuser(true))?; -- 2.30.2