use downcast-rs instead of our own AsAny

This commit is contained in:
trinity-1686a 2022-03-12 11:10:00 +01:00
parent 234291f666
commit 4826d757ac
3 changed files with 17 additions and 15 deletions

13
Cargo.lock generated
View File

@ -869,6 +869,8 @@ dependencies = [
[[package]] [[package]]
name = "derive_builder" name = "derive_builder"
version = "0.11.0" version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddd8db2d51ce241afb74f9e5cf9482de69c4b77657c2ddaf78993eda8ce2ce8c"
dependencies = [ dependencies = [
"derive_builder_macro", "derive_builder_macro",
] ]
@ -876,6 +878,8 @@ dependencies = [
[[package]] [[package]]
name = "derive_builder_core" name = "derive_builder_core"
version = "0.11.0" version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcf03b84d76c5bb011d983c17e2675ab49f5498f121bf1ceae5b5855b4a4dddd"
dependencies = [ dependencies = [
"darling", "darling",
"proc-macro2", "proc-macro2",
@ -886,6 +890,8 @@ dependencies = [
[[package]] [[package]]
name = "derive_builder_macro" name = "derive_builder_macro"
version = "0.11.0" version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cae44c47bca4fd1eaeda52b3d0eecb664ddcbc0d4e7b238bae7ec2c931646c0"
dependencies = [ dependencies = [
"derive_builder_core", "derive_builder_core",
"syn", "syn",
@ -974,6 +980,12 @@ dependencies = [
"winapi 0.3.9", "winapi 0.3.9",
] ]
[[package]]
name = "downcast-rs"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
[[package]] [[package]]
name = "easy-parallel" name = "easy-parallel"
version = "3.2.0" version = "3.2.0"
@ -3218,6 +3230,7 @@ dependencies = [
"async-trait", "async-trait",
"bounded-vec-deque", "bounded-vec-deque",
"derive_builder", "derive_builder",
"downcast-rs",
"educe", "educe",
"futures", "futures",
"futures-await-test", "futures-await-test",

View File

@ -34,6 +34,7 @@ tor-rtcompat = { path="../tor-rtcompat", version = "0.1.0"}
async-trait = "0.1.2" async-trait = "0.1.2"
bounded-vec-deque = "0.1" bounded-vec-deque = "0.1"
derive_builder = "0.11" derive_builder = "0.11"
downcast-rs = "1.2.0"
educe = "0.4.6" educe = "0.4.6"
futures = "0.3.14" futures = "0.3.14"
humantime-serde = "1.1.1" humantime-serde = "1.1.1"

View File

@ -1,5 +1,6 @@
//! Code related to tracking what activities a circuit can be used for. //! Code related to tracking what activities a circuit can be used for.
use downcast_rs::{impl_downcast, Downcast};
use rand::Rng; use rand::Rng;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::fmt::{self, Display}; use std::fmt::{self, Display};
@ -100,27 +101,14 @@ impl Display for TargetPorts {
} }
} }
use std::any::Any;
/// TODO /// TODO
pub trait AsAny { pub trait Isolation: Downcast + std::fmt::Debug + Send + Sync + 'static {
/// TODO
fn as_any(&self) -> &dyn Any;
}
impl<T: 'static> AsAny for T {
fn as_any(&self) -> &dyn Any {
self
}
}
/// TODO
pub trait Isolation: AsAny + std::fmt::Debug + Send + Sync + 'static {
/// TODO /// TODO
fn isolated(&self, other: &dyn Isolation) -> bool; fn isolated(&self, other: &dyn Isolation) -> bool;
/// TODO /// TODO
fn join(&self, other: &dyn Isolation) -> JoinResult; fn join(&self, other: &dyn Isolation) -> JoinResult;
} }
impl_downcast!(Isolation);
impl<T: IsolationHelper + std::fmt::Debug + Send + Sync + 'static> Isolation for T { impl<T: IsolationHelper + std::fmt::Debug + Send + Sync + 'static> Isolation for T {
fn isolated(&self, other: &dyn Isolation) -> bool { fn isolated(&self, other: &dyn Isolation) -> bool {