From 4259449184b11523e7d9d6a72ae0a83d32637a32 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 20 Mar 2021 17:29:02 +0000 Subject: [PATCH] global: Provide InstanceWeakRef The chess clock is going to need this. Signed-off-by: Ian Jackson --- src/global.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 { -- 2.30.2