Diffstat (limited to 'src/protocol/visitor/value.rs')
-rw-r--r--src/protocol/visitor/value.rs177
1 files changed, 7 insertions, 170 deletions
diff --git a/src/protocol/visitor/value.rs b/src/protocol/visitor/value.rs
index b2ae696..8e902ab 100644
--- a/src/protocol/visitor/value.rs
+++ b/src/protocol/visitor/value.rs
@@ -8,8 +8,8 @@ use crate::{
higher_ranked_type,
hkt::Marker,
protocol::{
- walker::hint::{HintKnown, HintMeta},
- Visitor,
+ walker::hint::{HintMeta, Meta},
+ DynVisitor,
},
};
@@ -69,7 +69,7 @@ pub struct ValueKnown<'a, T: ?Sized> {
pub struct ValueKnownHrt<T: ?Sized>(Marker<T>);
higher_ranked_type! {
- impl HintKnown {
+ impl Meta {
impl['a, 'ctx, T] type T['a, 'ctx] for ValueKnownHrt<T> =
ValueKnown<'a, TypeName::T<'a, 'ctx, T>>
where {
@@ -89,16 +89,18 @@ impl<T: TypeName::MemberType, E: Effect> HintMeta for ValueProto<T, E> {
type Known = ValueKnownHrt<T>;
type Hint = ();
+
+ type Effect = E;
}
pub fn visit_value<'a, 'ctx, T: Send + TypeName::LowerType<'a, 'ctx>, E: Effect>(
- visitor: Visitor<'a, 'ctx>,
+ visitor: DynVisitor<'a, 'ctx>,
value: T,
) -> Future<'a, VisitResult<T>, E>
where
TypeName::HigherRanked<'a, 'ctx, T>: TypeName::MemberType,
{
- if let Some(object) = visitor.upcast_mut::<ValueProto<TypeName::HigherRanked<'a, 'ctx, T>, E>>()
+ if let Some(object) = visitor.0.upcast_mut::<ValueProto<TypeName::HigherRanked<'a, 'ctx, T>, E>>()
{
// Allow the visitor to give a hint if it wants.
object.visit(value)
@@ -107,168 +109,3 @@ where
E::ready(VisitResult::Skipped(value))
}
}
-
-// #[cfg(test)]
-// mod test {
-// use core::marker::PhantomData;
-//
-// use crate::{
-// any::{AnyTrait, BorrowedMutStatic, BorrowedStatic, OwnedStatic},
-// any_trait,
-// effect::{BlockOn, Blocking, Spin},
-// };
-//
-// use super::*;
-//
-// #[test]
-// fn visit() {
-// struct Visitor<E>(Option<i32>, PhantomData<fn() -> E>);
-//
-// impl<'ctx, E> Value<'ctx, OwnedStatic<i32>, E> for Visitor<E>
-// where
-// E: Effect,
-// {
-// fn visit<'a>(&'a mut self, OwnedStatic(value): OwnedStatic<i32>) -> Future<'a, Flow, E>
-// where
-// 'ctx: 'a,
-// {
-// E::wrap(async move {
-// self.0 = Some(value);
-// Flow::Continue
-// })
-// }
-// }
-//
-// impl<'ctx, E> Value<'ctx, BorrowedStatic<'ctx, i32>, E> for Visitor<E>
-// where
-// E: Effect,
-// {
-// fn visit<'a>(
-// &'a mut self,
-// BorrowedStatic(value): BorrowedStatic<'ctx, i32>,
-// ) -> Future<'a, Flow, E>
-// where
-// 'ctx: 'a,
-// {
-// E::wrap(async {
-// self.0 = Some(*value);
-// Flow::Continue
-// })
-// }
-// }
-//
-// any_trait! {
-// impl['ctx, E] Visitor<E> = [
-// DynValue<'ctx, OwnedStatic<i32>, E>,
-// DynValue<'ctx, BorrowedStatic<'ctx, i32>, E>,
-// ] where E: Effect,
-// }
-//
-// let mut v = Visitor::<Blocking>(None, PhantomData);
-// let object: &mut (dyn AnyTrait<'_> + Send) = &mut v;
-// let _ = Spin::block_on(
-// object
-// .upcast_mut::<DynValue<'_, OwnedStatic<i32>, Blocking>>()
-// .unwrap()
-// .visit(OwnedStatic(42)),
-// );
-//
-// assert_eq!(v.0, Some(42));
-//
-// let object: &mut (dyn AnyTrait<'_> + Send) = &mut v;
-// let _ = Spin::block_on(
-// object
-// .upcast_mut::<DynValue<'_, BorrowedStatic<'_, i32>, Blocking>>()
-// .unwrap()
-// .visit(BorrowedStatic(&101)),
-// );
-//
-// assert_eq!(v.0, Some(101));
-// }
-//
-// #[test]
-// fn visit_borrowed() {
-// struct Visitor<'ctx, E>(Option<&'ctx mut String>, PhantomData<fn() -> E>);
-//
-// impl<'ctx, E> Value<'ctx, BorrowedMutStatic<'ctx, String>, E> for Visitor<'ctx, E>
-// where
-// E: Effect,
-// {
-// fn visit<'a>(
-// &'a mut self,
-// BorrowedMutStatic(value): BorrowedMutStatic<'ctx, String>,
-// ) -> Future<'a, Flow, E>
-// where
-// 'ctx: 'a,
-// {
-// E::wrap(async {
-// self.0 = Some(value);
-//
-// Flow::Continue
-// })
-// }
-// }
-//
-// any_trait! {
-// impl['ctx, E] Visitor<'ctx, E> = [
-// DynValue<'ctx, BorrowedMutStatic<'ctx, String>, E>,
-// ] where E: Effect
-// }
-//
-// let mut v = Visitor::<Blocking>(None, PhantomData);
-//
-// let mut y = String::from("abc");
-// let object: &mut (dyn AnyTrait<'_> + Send) = &mut v;
-// let _ = Spin::block_on(
-// object
-// .upcast_mut::<DynValue<'_, BorrowedMutStatic<'_, _>, Blocking>>()
-// .unwrap()
-// .visit(BorrowedMutStatic(&mut y)),
-// );
-//
-// v.0.unwrap().push_str("def");
-// assert_eq!(y, "abcdef");
-// }
-//
-// #[test]
-// fn visit_borrowed_unsized() {
-// struct Visitor<'ctx, E>(Option<&'ctx str>, PhantomData<fn() -> E>);
-//
-// impl<'ctx, E> Value<'ctx, BorrowedStatic<'ctx, str>, E> for Visitor<'ctx, E>
-// where
-// E: Effect,
-// {
-// fn visit<'a>(
-// &'a mut self,
-// BorrowedStatic(value): BorrowedStatic<'ctx, str>,
-// ) -> Future<'a, Flow, E>
-// where
-// 'ctx: 'a,
-// {
-// E::wrap(async {
-// self.0 = Some(value);
-// Flow::Continue
-// })
-// }
-// }
-//
-// any_trait! {
-// impl['ctx, E] Visitor<'ctx, E> = [
-// DynValue<'ctx, BorrowedStatic<'ctx, str>, E>,
-// ] where E: Effect
-// }
-//
-// let mut v = Visitor::<Blocking>(None, PhantomData);
-//
-// let y = String::from("abc");
-// let object: &mut (dyn AnyTrait<'_> + Send) = &mut v;
-// let _ = Spin::block_on(
-// object
-// .upcast_mut::<DynValue<'_, BorrowedStatic<'_, str>, Blocking>>()
-// .unwrap()
-// .visit(BorrowedStatic(&y)),
-// );
-//
-// assert_eq!(v.0, Some("abc"));
-// }
-// }