Skip to content

Commit a17a955

Browse files
committed
isolated enum cast crate
1 parent 9fd4910 commit a17a955

File tree

8 files changed

+40
-33
lines changed

8 files changed

+40
-33
lines changed

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[workspace]
22
members = [
33
"dynamic_plan_tree",
4-
"dynamic_plan_tree_derive",
4+
"enum_cast",
5+
"enum_cast_derive",
56
]

dynamic_plan_tree/Cargo.toml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@ name = "dynamic_plan_tree"
33
version = "0.1.0"
44
edition = "2021"
55

6-
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7-
86
[dependencies]
9-
dynamic_plan_tree_derive = { path = "../dynamic_plan_tree_derive" }
7+
enum_cast = { path = "../enum_cast" }
108
enum_dispatch = "0.3"
119
rayon = { version = "1.5", optional = true }
1210
serde = { version = "1.0", features = ["derive"]}

dynamic_plan_tree/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
pub use behaviour::Behaviour;
2-
pub use dynamic_plan_tree_derive::EnumCast;
2+
pub use enum_cast::*;
33
pub use enum_dispatch::enum_dispatch;
44
pub use plan::*;
55
pub use predicate::Predicate;

dynamic_plan_tree/src/plan.rs

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,6 @@ pub trait Config: Sized + 'static {
2020
type Behaviour: Behaviour<Self> + Serialize + DeserializeOwned + EnumCast;
2121
}
2222

23-
pub trait EnumRef<T> {
24-
fn enum_ref(&self) -> Option<&T>;
25-
fn enum_mut(&mut self) -> Option<&mut T>;
26-
}
27-
28-
pub trait EnumCast {
29-
fn cast<T: 'static>(&self) -> Option<&T>;
30-
fn cast_mut<T: 'static>(&mut self) -> Option<&mut T>;
31-
fn from_any<T: 'static>(t: T) -> Option<Self>
32-
where
33-
Self: Sized;
34-
}
35-
36-
pub trait IntoEnum {
37-
fn into_enum<T: EnumCast>(self) -> Option<T>
38-
where
39-
Self: 'static + Sized,
40-
{
41-
T::from_any(self)
42-
}
43-
}
44-
45-
impl<T> IntoEnum for T {}
46-
4723
/// Transition from `src` plans to `dst` plans within the parent plan upon the result of `predicate` evaluation.
4824
#[derive(Serialize, Deserialize)]
4925
pub struct Transition<P> {

enum_cast/Cargo.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[package]
2+
name = "enum_cast"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
enum_cast_derive = { path = "../enum_cast_derive" }

enum_cast/src/lib.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
pub use enum_cast_derive::EnumCast;
2+
3+
pub trait EnumRef<T> {
4+
fn enum_ref(&self) -> Option<&T>;
5+
fn enum_mut(&mut self) -> Option<&mut T>;
6+
}
7+
8+
pub trait EnumCast {
9+
fn cast<T: 'static>(&self) -> Option<&T>;
10+
fn cast_mut<T: 'static>(&mut self) -> Option<&mut T>;
11+
fn from_any<T: 'static>(t: T) -> Option<Self>
12+
where
13+
Self: Sized;
14+
}
15+
16+
pub trait IntoEnum {
17+
fn into_enum<T: EnumCast>(self) -> Option<T>
18+
where
19+
Self: 'static + Sized,
20+
{
21+
T::from_any(self)
22+
}
23+
}
24+
25+
impl<T> IntoEnum for T {}

dynamic_plan_tree_derive/Cargo.toml renamed to enum_cast_derive/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[package]
2-
name = "dynamic_plan_tree_derive"
2+
name = "enum_cast_derive"
33
version = "0.1.0"
44
edition = "2021"
55

dynamic_plan_tree_derive/src/lib.rs renamed to enum_cast_derive/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ pub fn enum_cast_derive(input: TokenStream) -> TokenStream {
2222

2323
quote! {
2424
#(
25-
impl #impl_generics EnumRef<#fields> for #name #ty_generics #where_clause {
25+
impl #impl_generics enum_cast::EnumRef<#fields> for #name #ty_generics #where_clause {
2626
fn enum_ref(&self) -> Option<&#fields> {
2727
match self {
2828
Self::#idents(x) => Some(x),
@@ -38,7 +38,7 @@ pub fn enum_cast_derive(input: TokenStream) -> TokenStream {
3838
}
3939
)*
4040

41-
impl #impl_generics EnumCast for #name #ty_generics #where_clause {
41+
impl #impl_generics enum_cast::EnumCast for #name #ty_generics #where_clause {
4242
fn cast<T: 'static>(&self) -> Option<&T> {
4343
match self {
4444
#(
@@ -70,7 +70,7 @@ pub fn enum_cast_derive(input: TokenStream) -> TokenStream {
7070
}
7171
Data::Struct(_) => {
7272
quote! {
73-
impl #impl_generics EnumCast for #name #ty_generics #where_clause {
73+
impl #impl_generics enum_cast::EnumCast for #name #ty_generics #where_clause {
7474
fn cast<T: 'static>(&self) -> Option<&T> {
7575
(self as &dyn std::any::Any).downcast_ref::<T>()
7676
}

0 commit comments

Comments
 (0)