chiark / gitweb /
list games
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 23 Nov 2020 00:32:38 +0000 (00:32 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 23 Nov 2020 00:32:38 +0000 (00:32 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/otter.rs

index 878599f5c0ee2e7231cfae5cf155810fc1e46e9e..c6967712b75343352036b7fa95891e85726ac620 100644 (file)
@@ -17,6 +17,7 @@ type AS = AccountScope;
 type APE = ArgumentParseError;
 type MC = MgmtCommand;
 type ME = MgmtError;
+type MR = MgmtResponse;
 type MGI = MgmtGameInstruction;
 type MGR = MgmtGameResponse;
 type TP = TablePermission;
@@ -691,6 +692,46 @@ fn access_game(ma: &MainOpts, table_name: &String) -> ConnForGame {
   }
 }
 
+//---------- list-games ----------
+
+mod list_games {
+  use super::*;
+
+  #[derive(Default,Debug)]
+  struct Args {
+    all: bool,
+  }
+
+  fn subargs(sa: &mut Args) -> ArgumentParser {
+    use argparse::*;
+    let mut ap = ArgumentParser::new();
+    ap.refer(&mut sa.all)
+      .add_option(&["--all"],StoreTrue,
+                    "list all games, not just yours");
+    ap
+  }
+
+  fn call(_sc: &Subcommand, ma: MainOpts, args: Vec<String>) ->Result<(),AE> {
+    let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
+    let mut conn = connect(&ma)?;
+    let mut games = match conn.cmd(&MC::ListGames { all: Some(args.all) })? {
+      MR::GamesList(g) => g,
+      x => throw!(anyhow!("unexpected response to ListGames: {:?}", &x)),
+    };
+    games.sort();
+    for g in games {
+      println!("{}", &g);
+    }
+    Ok(())
+  }
+
+  inventory::submit!{Subcommand(
+    "list-games",
+    "List games",
+    call,
+  )}
+}
+
 //---------- reset-game ----------
 
 mod reset_game {