chiark / gitweb /
set scope
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Aug 2020 11:11:40 +0000 (12:11 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Aug 2020 11:11:40 +0000 (12:11 +0100)
src/bin/otter.rs
src/commands.rs
src/error.rs

index 749a93f43f8ba0acc18c0aaf62f020de8f6b4cbb..dff3f85acfcd54664db79c86d5bed9249a232241 100644 (file)
@@ -180,11 +180,31 @@ fn main() {
 
 type Conn = MgmtChannel;
 
+trait ConnExt {
+  fn cmd(&mut self, cmd: &MgmtCommand) -> Result<MgmtResponse,AE>;
+}
+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<String>) {
     let args = parse_args::<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 {
       <Result<_,AE>>::Ok(spec)
     })().context("game spec toml").with_context(|| args.file.to_owned())?;
 
-    let chan = connect(&ma)?;
+    let _chan = connect(&ma)?;
 
     /*
 
index 3d673a44830b388d2f2e025a20e1d8384a49ca7e..374778c4d6e85b4e67135a5de1cb92002d51fb75 100644 (file)
@@ -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,
index aa0185fe8eeac384a7042a464acd594d0b3c08d4..e0e7351f68efa9e8a99d06876418865dd6dff533 100644 (file)
@@ -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,