chiark / gitweb /
wip cli for new accounts
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 6 Nov 2020 23:49:30 +0000 (23:49 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 6 Nov 2020 23:49:30 +0000 (23:49 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/accounts.rs
src/bin/otter.rs
src/spec.rs

index bf91e66b642708ec2cd9eabf34b8946ad60d4dfa..3ca4d13fc1a931cfc995f9969a20cad042985fd3 100644 (file)
@@ -104,9 +104,12 @@ impl AccountScope {
     }
     scope
   }
+}
 
+impl AccountName {
   pub fn default_nick(&self) -> String {
-    match self {
+    if self.subaccount != "" { return self.subaccount.clone() }
+    match &self.scope {
       AS::Server => "*SERVER*".into(),
       AS::Unix { user } => user.clone(),
     }
index f0cac36fa52349e68838dd1f6bb4e90435f940e4..01e2aec868ae29f293e2d8009c41cdb22f38d3dc 100644 (file)
@@ -257,7 +257,7 @@ impl Conn {
 
 struct ConnForGame {
   pub conn: Conn,
-  pub name: String,
+  pub name: InstanceName,
   pub how: MgmtGameUpdateMode,
 }
 impl Deref for ConnForGame {
@@ -346,12 +346,11 @@ impl ConnForGame {
 
 #[throws(E)]
 fn connect(ma: &MainOpts) -> Conn {
-  let socket_path = ma.socket_path.as_ref().unwrap();
-  let unix = UnixStream::connect(&socket_path)
-    .with_context(||socket_path.clone()).context("connect to server")?; 
+  let unix = UnixStream::connect(&ma.socket_path)
+    .with_context(||ma.socket_path.clone()).context("connect to server")?; 
   let chan = MgmtChannel::new(unix)?;
   let mut chan = Conn { chan };
-  chan.cmd(&MgmtCommand::SetAccount(ma.account.clone().unwrap()))?;
+  chan.cmd(&MgmtCommand::SetAccount(ma.account.clone()))?;
   chan
 }
 
@@ -371,7 +370,7 @@ fn setup_table(ma: &MainOpts, chan: &mut ConnForGame,
 
     let mut insns = vec![];
     for pspec in &spec.players {
-      let nick = pspec.unwrap_or(|| pspec.account.default_nick());
+      let nick = pspec.nick.unwrap_or_else(|| pspec.account.default_nick());
       let st = nick2st.entry(nick.clone()).or_default();
       if st.new {
         Err(anyhow!("duplicate player nick {:?} in spec", &nick))?;
@@ -383,9 +382,9 @@ fn setup_table(ma: &MainOpts, chan: &mut ConnForGame,
       // ^ todo use client program timezone?
       if !st.old {
         insns.push(MgmtGameInstruction::AddPlayer {
-          account: &spec.account,
+          account: pspec.account.clone(),
           details: MgmtPlayerDetails {
-            nick,
+            nick: Some(nick),
             timezone,
           },
         });
index 6b192e2a3063d0e8512868be59a93bcdc21a25a6..539e07f33c40cafbf96830c727e1e3393b6286b6 100644 (file)
@@ -67,9 +67,9 @@ pub struct TableSpec {
 
 #[derive(Debug,Serialize,Deserialize)]
 pub struct TablePlayerSpec {
-  account: AccountName,
-  nick: Option<String>,
-  timezone: Option<String>,
+  pub account: AccountName,
+  pub nick: Option<String>,
+  pub timezone: Option<String>,
 }
 
 type RawAcl<Perm> = Vec<AclEntry<Perm>>;