From: Ian Jackson Date: Wed, 28 Apr 2021 17:01:34 +0000 (+0100) Subject: specs: Plumb InstanceName through to TablePlayerSpec::account_glob X-Git-Tag: otter-0.6.0~516 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=1aa6869b4e0303c95e58595ada6613980e87f6a4;p=otter.git specs: Plumb InstanceName through to TablePlayerSpec::account_glob This makes it possible for the meaning of a TablePlayerSpec to be "local" relative to the instance name. Signed-off-by: Ian Jackson --- diff --git a/src/bin/otter.rs b/src/bin/otter.rs index 4471fb1a..2bfdfc6a 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -516,7 +516,8 @@ const PLAYER_DEFAULT_PERMS: &[TablePermission] = &[ ]; #[throws(AE)] -fn setup_table(_ma: &MainOpts, spec: &TableSpec) -> Vec { +fn setup_table(_ma: &MainOpts, instance_name: &InstanceName, spec: &TableSpec) + -> Vec { let TableSpec { players, player_perms, acl, links } = spec; let mut player_perms = player_perms.clone() .unwrap_or(PLAYER_DEFAULT_PERMS.iter().cloned().collect()); @@ -524,7 +525,7 @@ fn setup_table(_ma: &MainOpts, spec: &TableSpec) -> Vec { let acl: RawAcl<_> = players.iter().map(|tps| AclEntry { - account_glob: tps.account_glob(), + account_glob: tps.account_glob(instance_name), allow: player_perms.clone(), deny: default(), }) @@ -663,8 +664,9 @@ mod reset_game { fn call(_sc: &Subcommand, ma: MainOpts, args: Vec) ->Result<(),AE> { let args = parse_args::(args, &subargs, &ok_id, None); + let instance_name = ma.instance_name(&args.table_name); let mut chan = access_account(&ma)?.chan.for_game( - ma.instance_name(&args.table_name), + instance_name.clone(), MgmtGameUpdateMode::Bulk, ); let GameSpec { @@ -689,7 +691,7 @@ mod reset_game { Err(e) })?; - insns.extend(setup_table(&ma, &table_spec)?); + insns.extend(setup_table(&ma, &instance_name, &table_spec)?); } let (pcs, aliases) = chan.list_pieces()?; diff --git a/src/spec.rs b/src/spec.rs index 2b14d782..83c84c2c 100644 --- a/src/spec.rs +++ b/src/spec.rs @@ -358,7 +358,7 @@ pub mod imp { } impl TablePlayerSpec { - pub fn account_glob(&self) -> String { + pub fn account_glob(&self, _instance_name: &InstanceName) -> String { fn scope_glob(scope: AccountScope) -> String { let mut out = "".to_string(); scope.display_name(&[""], |s| Ok::<_,Void>(out += s)).unwrap();