From cf91550c65a0a1fb0cdd6bad714432ae8b786011 Mon Sep 17 00:00:00 2001 From: Scott Olson Date: Tue, 15 Sep 2020 03:33:18 +0100 Subject: refactor: Remove dependency on downcast_rs. (#7475) We don't seem to use downcast_rs in any essential way. We can just use the standard library `Any` directly. --- core/Cargo.toml | 1 - core/lib.rs | 2 -- core/resources.rs | 34 +++++++++------------------------- 3 files changed, 9 insertions(+), 28 deletions(-) (limited to 'core') diff --git a/core/Cargo.toml b/core/Cargo.toml index d9b1243fc..f279accef 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -14,7 +14,6 @@ path = "lib.rs" [dependencies] anyhow = "1.0.32" -downcast-rs = "1.2.0" futures = "0.3.5" indexmap = "1.6.0" lazy_static = "1.4.0" diff --git a/core/lib.rs b/core/lib.rs index ba7fdcd21..73d0da071 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -1,7 +1,5 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -#[macro_use] -extern crate downcast_rs; extern crate futures; #[macro_use] extern crate lazy_static; diff --git a/core/resources.rs b/core/resources.rs index 7a42a68a9..51d3260dc 100644 --- a/core/resources.rs +++ b/core/resources.rs @@ -6,7 +6,6 @@ // Resources may or may not correspond to a real operating system file // descriptor (hence the different name). -use downcast_rs::Downcast; use std::any::Any; use std::collections::HashMap; @@ -16,7 +15,7 @@ pub type ResourceId = u32; /// These store Deno's file descriptors. These are not necessarily the operating /// system ones. -type ResourceMap = HashMap)>; +type ResourceMap = HashMap)>; #[derive(Default)] pub struct ResourceTable { @@ -29,20 +28,14 @@ impl ResourceTable { self.map.contains_key(&rid) } - pub fn get(&self, rid: ResourceId) -> Option<&T> { - if let Some((_name, resource)) = self.map.get(&rid) { - return resource.downcast_ref::(); - } - - None + pub fn get(&self, rid: ResourceId) -> Option<&T> { + let (_, resource) = self.map.get(&rid)?; + resource.downcast_ref::() } - pub fn get_mut(&mut self, rid: ResourceId) -> Option<&mut T> { - if let Some((_name, resource)) = self.map.get_mut(&rid) { - return resource.downcast_mut::(); - } - - None + pub fn get_mut(&mut self, rid: ResourceId) -> Option<&mut T> { + let (_, resource) = self.map.get_mut(&rid)?; + resource.downcast_mut::() } // TODO: resource id allocation should probably be randomized for security. @@ -52,7 +45,7 @@ impl ResourceTable { next_rid as ResourceId } - pub fn add(&mut self, name: &str, resource: Box) -> ResourceId { + pub fn add(&mut self, name: &str, resource: Box) -> ResourceId { let rid = self.next_rid(); let r = self.map.insert(rid, (name.to_string(), resource)); assert!(r.is_none()); @@ -73,7 +66,7 @@ impl ResourceTable { self.map.remove(&rid).map(|(_name, _resource)| ()) } - pub fn remove(&mut self, rid: ResourceId) -> Option> { + 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), @@ -85,15 +78,6 @@ impl ResourceTable { } } -/// Abstract type representing resource in Deno. -/// -/// The only thing it does is implementing `Downcast` trait -/// that allows to cast resource to concrete type in `TableResource::get` -/// and `TableResource::get_mut` methods. -pub trait Resource: Downcast + Any {} -impl Resource for T where T: Downcast + Any {} -impl_downcast!(Resource); - #[cfg(test)] mod tests { use super::*; -- cgit v1.2.3