From: Ian Jackson Date: Sat, 20 Mar 2021 17:29:02 +0000 (+0000) Subject: global: Provide InstanceWeakRef X-Git-Tag: otter-0.5.0~630 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=4259449184b11523e7d9d6a72ae0a83d32637a32;p=otter.git global: Provide InstanceWeakRef The chess clock is going to need this. Signed-off-by: Ian Jackson --- diff --git a/src/global.rs b/src/global.rs index efcef687..4e31e66a 100644 --- a/src/global.rs +++ b/src/global.rs @@ -37,6 +37,9 @@ pub struct InstanceName { #[derive(Debug,Clone)] pub struct InstanceRef (Arc>); +#[derive(Debug,Clone)] +pub struct InstanceWeakRef (std::sync::Weak>); + #[derive(Debug,Clone,Serialize,Deserialize,Default)] #[serde(transparent)] pub struct LinksTable(pub EnumMap>); @@ -287,6 +290,16 @@ impl InstanceRef { Err(poison) => poison.into_inner(), } } + + pub fn downgrade_to_weak(&self) -> InstanceWeakRef { + InstanceWeakRef(Arc::downgrade(&self.0)) + } +} + +impl InstanceWeakRef { + pub fn upgrade(&self) -> Option { + Some(InstanceRef(self.0.upgrade()?)) + } } impl Unauthorised {