Diffstat (limited to 'src/build/builders/serde/deserialize.rs')
-rw-r--r--src/build/builders/serde/deserialize.rs34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/build/builders/serde/deserialize.rs b/src/build/builders/serde/deserialize.rs
index 2fbc1c0..8a9fa3e 100644
--- a/src/build/builders/serde/deserialize.rs
+++ b/src/build/builders/serde/deserialize.rs
@@ -9,7 +9,7 @@ use crate::{
any_trait,
protocol::{
visitor::{Sequence, SequenceScope, Status, Value},
- AnyTraitObj, AnyTraitSendObj, AsyncEffect, ControlFlowFor, Effect, SyncEffect,
+ AsObj, AsyncEffect, Yield, Effect, SyncEffect,
},
AsVisitor, Builder as _,
};
@@ -25,7 +25,7 @@ impl std::error::Error for Error {}
pub struct Builder<T, E>(Result<T, Error>, PhantomData<fn() -> E>);
-impl<'ctx, T: Deserialize<'ctx>, E: Effect<'ctx>> crate::Builder<'ctx, E> for Builder<T, E>
+impl<'ctx, T: Deserialize<'ctx>, E: Effect<'ctx, ControlFlow<(), ()>>> crate::Builder<'ctx, E> for Builder<T, E>
where
Self: AsVisitor<'ctx, E>,
{
@@ -33,7 +33,7 @@ where
type Value = T;
- fn build(self) -> Result<Self::Value, Self::Error> {
+ fn build<'a>(self) -> Result<Self::Value, Self::Error> where Self: 'a {
self.0
}
@@ -42,35 +42,40 @@ where
fn from_seed(seed: Self::Seed) -> Self {
Self(Err(Error::Incomplete), PhantomData)
}
+
+ type Effect = SyncEffect;
}
impl<'ctx, T: Deserialize<'ctx>> AsVisitor<'ctx, SyncEffect> for Builder<T, SyncEffect> {
fn as_visitor(&mut self) -> crate::protocol::Visitor<'_, 'ctx, SyncEffect> {
- AnyTraitObj::from_obj(self)
+ self
}
}
impl<'ctx, T: Deserialize<'ctx> + Send> AsVisitor<'ctx, AsyncEffect> for Builder<T, AsyncEffect> {
fn as_visitor(&mut self) -> crate::protocol::Visitor<'_, 'ctx, AsyncEffect> {
- AnyTraitSendObj::from_obj_send(self)
+ self
}
}
any_trait! {
impl['a, 'ctx, T: Deserialize<'ctx>, E] Builder<T, E> = [
- dyn Value<'ctx, OwnedStatic<bool>> + 'a,
- dyn Sequence<'ctx> + 'a,
+ dyn Value<'ctx, OwnedStatic<bool>, SyncEffect> + 'a,
+ dyn Sequence<'ctx, SyncEffect> + 'a,
]
}
enum InjectedValue<'a, 'ctx> {
Bool(bool),
- Sequence(&'a mut dyn SequenceScope<'ctx>),
+ Sequence(&'a mut dyn SequenceScope<'ctx, SyncEffect>),
}
-impl<'ctx, T: Deserialize<'ctx>, E> Value<'ctx, OwnedStatic<bool>> for Builder<T, E> {
+impl<'ctx, T: Deserialize<'ctx>, E> Value<'ctx, OwnedStatic<bool>, SyncEffect> for Builder<T, E> {
#[inline]
- fn visit<'a>(&'a mut self, OwnedStatic(value): OwnedStatic<bool>) -> ControlFlowFor<'a, 'ctx> where 'ctx: 'a {
+ fn visit<'a>(&'a mut self, OwnedStatic(value): OwnedStatic<bool>) -> Yield<'a, 'ctx, ControlFlow<(), ()>, SyncEffect>
+ where
+ 'ctx: 'a,
+ {
self.0 = T::deserialize(InjectedValue::Bool(value));
if self.0.is_err() {
@@ -81,9 +86,12 @@ impl<'ctx, T: Deserialize<'ctx>, E> Value<'ctx, OwnedStatic<bool>> for Builder<T
}
}
-impl<'ctx, T: Deserialize<'ctx>, E> Sequence<'ctx> for Builder<T, E> {
+impl<'ctx, T: Deserialize<'ctx>, E> Sequence<'ctx, SyncEffect> for Builder<T, E> {
#[inline]
- fn visit<'a>(&'a mut self, scope: &'a mut dyn SequenceScope<'ctx>) -> ControlFlowFor<'a, 'ctx> where 'ctx: 'a {
+ fn visit<'a>(&'a mut self, scope: &'a mut dyn SequenceScope<'ctx, SyncEffect>) -> Yield<'a, 'ctx, ControlFlow<(), ()>, SyncEffect>
+ where
+ 'ctx: 'a,
+ {
self.0 = T::deserialize(InjectedValue::Sequence(scope));
if self.0.is_err() {
@@ -130,7 +138,7 @@ impl<'a, 'ctx> Deserializer<'ctx> for InjectedValue<'a, 'ctx> {
}
}
-struct SequenceAccess<'a, 'ctx>(&'a mut dyn SequenceScope<'ctx>);
+struct SequenceAccess<'a, 'ctx>(&'a mut dyn SequenceScope<'ctx, SyncEffect>);
impl<'a, 'ctx> SeqAccess<'ctx> for SequenceAccess<'a, 'ctx> {
type Error = Error;