chiark / gitweb /
before clone for PlayerAccessSpec via serde
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 15 Nov 2020 18:08:26 +0000 (18:08 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 15 Nov 2020 18:09:22 +0000 (18:09 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/otter.rs
src/spec.rs

index 25409f521b41a23ec436e97875ef8f2a6f1c2f41..f165f9c98a1d18cb14c9c2fbb3d038ecb0c46724 100644 (file)
@@ -72,7 +72,7 @@ struct MainOpts {
   timezone: Option<String>,
   // xxx default to UrlOnStdout
   // xxx options for others
-  access: Option<Box<dyn PlayerAccessSpec>>,
+  access: Box<dyn PlayerAccessSpec>,
   socket_path: String,
   verbose: i32,
 }
@@ -153,6 +153,7 @@ fn main() {
     account: Option<AccountName>,
     gaccount: Option<AccountName>,
     socket_path: Option<String>,
+    access: Option<Box<dyn PlayerAccessSpec>>,
     verbose: i32,
     config_filename: Option<String>,
     subcommand: String,
@@ -174,6 +175,11 @@ fn main() {
     account.metavar("ACCOUNT").add_option(&["--account"],
                      StoreOption,
                      "use account ACCOUNT (default: unix:<current user>:)");
+    let urloso : Option<Box<dyn PlayerAccessSpec>> = Some(Box::new(UrlOnStdout));
+    let mut access = ap.refer(&mut rma.access);
+    access.add_option(&["--url-on-stdout"],
+                      StoreConst(urloso),
+                      "show game access url by printing to stdout");
     let mut gaccount = ap.refer(&mut rma.gaccount);
     gaccount.metavar("GAME-ACCOUNT").add_option(&["--game-name-account"],
                      StoreOption,
@@ -189,9 +195,14 @@ fn main() {
                        "set verbosity to error messages only");
     verbose.add_option(&["-v","--verbose"], IncrBy(1),
        "increase verbosity (default is short progress messages)");
+    access.metavar("TOKEN").add_option(
+      &["--fixed-token"],
+      MapStore(|s| Box::new(FixedToken { token: RawToken (s.to_string()) })),
+      "use fixed game access token TOKEN (for administrators only)r"
+    );
     ap
   }, &|RawMainArgs {
-      account, gaccount, socket_path, verbose, config_filename,
+      account, gaccount, access, socket_path, verbose, config_filename,
       subcommand, subargs,
   }|{
     let account : AccountName = account.map(Ok::<_,APE>).unwrap_or_else(||{
index 8b40bdcd542a0773ab2af6e8dd3c2ee6d13e73a1..554f6e964162f22ea50be8625010dfdcd471e6ac 100644 (file)
@@ -112,10 +112,10 @@ pub enum TablePermission {
 pub struct PlayerAccessUnset;
 
 #[derive(Debug,Serialize,Deserialize)]
-struct FixedToken { token: RawToken }
+pub struct FixedToken { pub token: RawToken }
 
 #[derive(Debug,Serialize,Deserialize)]
-struct UrlOnStdout;
+pub struct UrlOnStdout;
 
 //#[derive(Debug,Serialize,Deserialize)]
 //struct TokenByEmail { email: String };
@@ -330,6 +330,7 @@ pub mod implementation {
       let inner = Html::from_txt(&format!("{:?}", self));
       Html(format!("<code>{}</code>", inner.0))
     }
+    fn clone_box(&self) 
   }
 
   #[typetag::serde]