From 47617e60d551665ec509e013cfcae30987cb3b2b Mon Sep 17 00:00:00 2001 From: EnokMan <416828041@qq.com> Date: Sat, 18 Apr 2020 10:21:20 -0500 Subject: feat: startTLS (#4773) --- core/resources.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'core') diff --git a/core/resources.rs b/core/resources.rs index ba69e8c98..7a42a68a9 100644 --- a/core/resources.rs +++ b/core/resources.rs @@ -72,6 +72,17 @@ impl ResourceTable { pub fn close(&mut self, rid: ResourceId) -> Option<()> { self.map.remove(&rid).map(|(_name, _resource)| ()) } + + pub fn remove(&mut self, rid: ResourceId) -> Option> { + if let Some((_name, resource)) = self.map.remove(&rid) { + let res = match resource.downcast::() { + Ok(res) => Some(res), + Err(_e) => None, + }; + return res; + } + None + } } /// Abstract type representing resource in Deno. @@ -138,4 +149,18 @@ mod tests { table.close(rid2); assert_eq!(table.map.len(), 0); } + + #[test] + fn test_take_from_resource_table() { + let mut table = ResourceTable::default(); + let rid1 = table.add("fake1", Box::new(FakeResource::new(1))); + let rid2 = table.add("fake2", Box::new(FakeResource::new(2))); + assert_eq!(table.map.len(), 2); + let res1 = table.remove::(rid1); + assert_eq!(table.map.len(), 1); + assert!(res1.is_some()); + let res2 = table.remove::(rid2); + assert_eq!(table.map.len(), 0); + assert!(res2.is_some()); + } } -- cgit v1.2.3