From: Ian Jackson Date: Thu, 11 Mar 2021 10:29:06 +0000 (+0000) Subject: occult ilks: Save and restore X-Git-Tag: otter-0.4.0~193 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=1a98f144ee68277002358a6b70b2911db2deaf66;p=otter.git occult ilks: Save and restore Signed-off-by: Ian Jackson --- diff --git a/src/global.rs b/src/global.rs index 46fe7ff6..764f72a2 100644 --- a/src/global.rs +++ b/src/global.rs @@ -46,6 +46,7 @@ pub struct Instance { pub name: Arc, pub gs: GameState, pub ipieces: IPieces, + pub ioccults: OccultIlks, pub clients: DenseSlotMap, pub iplayers: SecondarySlotMap, pub tokens_players: TokenRegistry, @@ -214,8 +215,9 @@ pub struct InstanceContainer { } #[derive(Debug,Default,Serialize,Deserialize)] -struct InstanceSaveAccesses { +struct InstanceSaveAccesses { ipieces: PiecesLoadedRef, + #[serde(default)] ioccults: OccultIlksRef, tokens_players: Vec<(RawTokenStr, PlayerId)>, aplayers: SecondarySlotMap, acl: Acl, @@ -297,6 +299,7 @@ impl Instance { name: name.clone(), gs, acl, ipieces: IPieces(default()), + ioccults: default(), clients: default(), iplayers: default(), tokens_players: default(), @@ -969,6 +972,7 @@ impl InstanceGuard<'_> { fn save_access_now(&mut self) { self.save_something("a-", |s, w| { let ipieces = &s.c.g.ipieces; + let ioccults = &s.c.g.ioccults; let tokens_players: Vec<(&str, PlayerId)> = { let global_players = GLOBAL.players.read().unwrap(); s.c.g.tokens_players.tr @@ -986,7 +990,7 @@ impl InstanceGuard<'_> { let acl = s.c.g.acl.clone().into(); let links = s.c.g.links.clone(); let isa = InstanceSaveAccesses { - ipieces, tokens_players, aplayers, acl, links, + ipieces, ioccults, tokens_players, aplayers, acl, links, }; rmp_serde::encode::write_named(w, &isa) })?; @@ -1009,8 +1013,8 @@ impl InstanceGuard<'_> { fn load_game(accounts: &AccountsGuard, games: &mut GamesGuard, name: InstanceName) -> Option { - let InstanceSaveAccesses:: - { tokens_players, mut ipieces, mut aplayers, acl, links } + let InstanceSaveAccesses:: + { tokens_players, mut ipieces, ioccults, mut aplayers, acl, links } = match Self::load_something(&name, "a-") { Ok(data) => data, Err(e) => if (||{ @@ -1074,6 +1078,7 @@ impl InstanceGuard<'_> { gs, iplayers, links, acl: acl.into(), ipieces: IPieces(ipieces), + ioccults, name: name.clone(), clients: default(), tokens_clients: default(), diff --git a/src/occultilks.rs b/src/occultilks.rs index aedacb72..44a108eb 100644 --- a/src/occultilks.rs +++ b/src/occultilks.rs @@ -22,7 +22,7 @@ type K = OccultIlkName; type V = Box; type Refcount = u32; -#[derive(Debug,Serialize,Deserialize)] +#[derive(Debug,Serialize,Deserialize,Default)] pub struct OccultIlks { lookup: HashMap, table: DenseSlotMap,