From: Ian Jackson Date: Sat, 15 Aug 2020 11:11:40 +0000 (+0100) Subject: set scope X-Git-Tag: otter-0.2.0~1125 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=ac1aaa431697297b0535dc9c13c2062386128d47;p=otter.git set scope --- diff --git a/src/bin/otter.rs b/src/bin/otter.rs index 749a93f4..dff3f85a 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -180,11 +180,31 @@ fn main() { type Conn = MgmtChannel; +trait ConnExt { + fn cmd(&mut self, cmd: &MgmtCommand) -> Result; +} +impl ConnExt for Conn { + #[throws(AE)] + fn cmd(&mut self, cmd: &MgmtCommand) -> MgmtResponse { + use MgmtResponse::*; + self.write(&cmd).context("send command")?; + let resp = self.read().context("read response")?; + match &resp { + Fine{..} | GamesList{..} => { }, + AlterGame { error: None, .. } => { }, + Error { error } | AlterGame { error: Some(error), .. } => { + Err(error.clone()).context(format!("response to: {:?}",cmd))?; + }, + }; + resp + } +} + #[throws(E)] -fn connect(_ma: &MainOpts) -> MgmtChannel { +fn connect(ma: &MainOpts) -> MgmtChannel { let unix = UnixStream::connect(SOCKET_PATH).context("connect to server")?; - let chan = MgmtChannel::new(unix)?; - // xxx set scope + let mut chan = MgmtChannel::new(unix)?; + chan.cmd(&MgmtCommand::SetScope { scope: ma.scope.clone().unwrap() })?; chan } @@ -214,7 +234,7 @@ mod create_table { fn call(_sc: &Subcommand, ma: MainOpts, args: Vec) { let args = parse_args::(args, &subargs, &complete, None); - let spec = (||{ + let _spec = (||{ let mut f = File::open(&args.file).context("open")?; let mut buf = String::new(); f.read_to_string(&mut buf).context("read")?; @@ -222,7 +242,7 @@ mod create_table { >::Ok(spec) })().context("game spec toml").with_context(|| args.file.to_owned())?; - let chan = connect(&ma)?; + let _chan = connect(&ma)?; /* diff --git a/src/commands.rs b/src/commands.rs index 3d673a44..374778c4 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -45,7 +45,7 @@ pub enum MgmtGameUpdateMode { Bulk, } -#[derive(Debug,Error,Serialize,Deserialize)] +#[derive(Debug,Clone,Error,Serialize,Deserialize)] pub enum MgmtError { ParseFailed(String), AuthorisationError, diff --git a/src/error.rs b/src/error.rs index aa0185fe..e0e7351f 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,7 +1,7 @@ use crate::imports::*; -#[derive(Error,Debug,Serialize,Deserialize)] +#[derive(Error,Clone,Debug,Serialize,Deserialize)] #[error("operation error {:?}",self)] pub enum GameError { Conflict,