0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 09:31:22 -05:00

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.
This commit is contained in:
Scott Olson 2020-09-15 03:33:18 +01:00 committed by GitHub
parent 7023263b30
commit cf91550c65
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 61 deletions

65
Cargo.lock generated
View file

@ -93,7 +93,7 @@ dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"swc_macros_common",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -326,12 +326,12 @@ dependencies = [
[[package]]
name = "crossbeam-channel"
version = "0.4.3"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ee0cc8804d5393478d743b035099520087a5186f3b93fa58cec08fa62407b6"
checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87"
dependencies = [
"cfg-if",
"crossbeam-utils",
"maybe-uninit",
]
[[package]]
@ -366,7 +366,7 @@ dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"strsim 0.9.3",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -377,7 +377,7 @@ checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
dependencies = [
"darling_core",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -457,7 +457,6 @@ name = "deno_core"
version = "0.57.0"
dependencies = [
"anyhow",
"downcast-rs",
"futures",
"indexmap",
"lazy_static",
@ -558,12 +557,6 @@ dependencies = [
"syn 0.15.44",
]
[[package]]
name = "downcast-rs"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
[[package]]
name = "dprint-core"
version = "0.28.0"
@ -615,7 +608,7 @@ dependencies = [
"pmutil",
"proc-macro2 1.0.21",
"swc_macros_common",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -687,7 +680,7 @@ dependencies = [
"pmutil",
"proc-macro2 1.0.21",
"swc_macros_common",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -788,7 +781,7 @@ dependencies = [
"proc-macro-hack",
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -1097,7 +1090,7 @@ dependencies = [
"pmutil",
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -1189,6 +1182,12 @@ version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
[[package]]
name = "maybe-uninit"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
[[package]]
name = "memchr"
version = "2.3.3"
@ -1500,7 +1499,7 @@ dependencies = [
"proc-macro-hack",
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -1529,7 +1528,7 @@ checksum = "2c0e815c3ee9a031fdf5af21c10aa17c573c9c6a566328d99e3936c34e36461f"
dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -1552,7 +1551,7 @@ checksum = "3894e5d549cccbe44afecf72922f277f603cd4bb0219c8342631ef18fffbe004"
dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -2022,7 +2021,7 @@ checksum = "f630a6370fd8e457873b4bd2ffdae75408bc291ba72be773772a4c2a065d9ae8"
dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -2183,7 +2182,7 @@ dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"swc_macros_common",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -2269,7 +2268,7 @@ dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"swc_macros_common",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -2315,7 +2314,7 @@ dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"swc_macros_common",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -2362,7 +2361,7 @@ dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"swc_macros_common",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -2417,7 +2416,7 @@ dependencies = [
"pmutil",
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -2441,7 +2440,7 @@ dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"swc_macros_common",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -2457,9 +2456,9 @@ dependencies = [
[[package]]
name = "syn"
version = "1.0.40"
version = "1.0.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350"
checksum = "6690e3e9f692504b941dc6c3b188fd28df054f7fb8469ab40680df52fdcc842b"
dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
@ -2549,7 +2548,7 @@ checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793"
dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -2610,7 +2609,7 @@ checksum = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389"
dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
]
[[package]]
@ -2929,7 +2928,7 @@ dependencies = [
"log",
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
"wasm-bindgen-shared",
]
@ -2963,7 +2962,7 @@ checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe"
dependencies = [
"proc-macro2 1.0.21",
"quote 1.0.7",
"syn 1.0.40",
"syn 1.0.41",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]

View file

@ -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"

View file

@ -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;

View file

@ -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<ResourceId, (String, Box<dyn Resource>)>;
type ResourceMap = HashMap<ResourceId, (String, Box<dyn Any>)>;
#[derive(Default)]
pub struct ResourceTable {
@ -29,20 +28,14 @@ impl ResourceTable {
self.map.contains_key(&rid)
}
pub fn get<T: Resource>(&self, rid: ResourceId) -> Option<&T> {
if let Some((_name, resource)) = self.map.get(&rid) {
return resource.downcast_ref::<T>();
}
None
pub fn get<T: Any>(&self, rid: ResourceId) -> Option<&T> {
let (_, resource) = self.map.get(&rid)?;
resource.downcast_ref::<T>()
}
pub fn get_mut<T: Resource>(&mut self, rid: ResourceId) -> Option<&mut T> {
if let Some((_name, resource)) = self.map.get_mut(&rid) {
return resource.downcast_mut::<T>();
}
None
pub fn get_mut<T: Any>(&mut self, rid: ResourceId) -> Option<&mut T> {
let (_, resource) = self.map.get_mut(&rid)?;
resource.downcast_mut::<T>()
}
// 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<dyn Resource>) -> ResourceId {
pub fn add(&mut self, name: &str, resource: Box<dyn Any>) -> 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<T: Resource>(&mut self, rid: ResourceId) -> Option<Box<T>> {
pub fn remove<T: Any>(&mut self, rid: ResourceId) -> Option<Box<T>> {
if let Some((_name, resource)) = self.map.remove(&rid) {
let res = match resource.downcast::<T>() {
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<T> Resource for T where T: Downcast + Any {}
impl_downcast!(Resource);
#[cfg(test)]
mod tests {
use super::*;