Diffstat (limited to 'src/build/builders/serde/deserialize.rs')
| -rw-r--r-- | src/build/builders/serde/deserialize.rs | 34 |
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; |