Diffstat (limited to 'src/build/builders/serde/deserialize_seed.rs')
| -rw-r--r-- | src/build/builders/serde/deserialize_seed.rs | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/src/build/builders/serde/deserialize_seed.rs b/src/build/builders/serde/deserialize_seed.rs index df38405..23434cf 100644 --- a/src/build/builders/serde/deserialize_seed.rs +++ b/src/build/builders/serde/deserialize_seed.rs @@ -12,7 +12,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 _, }; @@ -41,15 +41,17 @@ pub struct Builder<'ctx, T: DeserializeSeed<'ctx>, E>( PhantomData<fn() -> E>, ); -impl<'ctx, T: DeserializeSeed<'ctx>, E: Effect<'ctx>> crate::Builder<'ctx, E> for Builder<'ctx, T, E> +impl<'ctx, T: DeserializeSeed<'ctx>, E: Effect<'ctx, ControlFlow<(), ()>>> crate::Builder<'ctx, E> + for Builder<'ctx, T, E> where Self: AsVisitor<'ctx, E>, { + type Error = Error<T>; type Value = T::Value; - fn build(self) -> Result<Self::Value, Self::Error> { + fn build<'a>(self) -> Result<Self::Value, Self::Error> where Self: 'a { self.0 } @@ -58,11 +60,13 @@ where fn from_seed(seed: Self::Seed) -> Self { Self(Err(Error::Pending(seed)), PhantomData) } + + type Effect = SyncEffect; } impl<'ctx, T: DeserializeSeed<'ctx>> AsVisitor<'ctx, SyncEffect> for Builder<'ctx, T, SyncEffect> { fn as_visitor(&mut self) -> crate::protocol::Visitor<'_, 'ctx, SyncEffect> { - AnyTraitObj::from_obj(self) + self } } @@ -72,26 +76,32 @@ where T::Value: Send, { fn as_visitor(&mut self) -> crate::protocol::Visitor<'_, 'ctx, AsyncEffect> { - AnyTraitSendObj::from_obj_send(self) + self } } any_trait! { impl['a, 'ctx, T: DeserializeSeed<'ctx>, E] Builder<'ctx, 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, T> { Bool(bool), - Sequence(&'a mut dyn SequenceScope<'ctx>), + Sequence(&'a mut dyn SequenceScope<'ctx, SyncEffect>), Extra(PhantomData<T>), } -impl<'ctx, T: DeserializeSeed<'ctx>, E> Value<'ctx, OwnedStatic<bool>> for Builder<'ctx, T, E> { +impl<'ctx, T: DeserializeSeed<'ctx>, E> Value<'ctx, OwnedStatic<bool>, SyncEffect> for Builder<'ctx, T, E> { #[inline] - fn visit<'a>(&'a mut self, OwnedStatic(bool_value): OwnedStatic<bool>) -> ControlFlowFor<'a, 'ctx> where 'ctx: 'a { + fn visit<'a>( + &'a mut self, + OwnedStatic(bool_value): OwnedStatic<bool>, + ) -> Yield<'a, 'ctx, ControlFlow<(), ()>, SyncEffect> + where + 'ctx: 'a, + { let pending = core::mem::replace(&mut self.0, Err(Error::Incomplete)); let Err(Error::Pending(value)) = pending else { todo!() @@ -107,9 +117,12 @@ impl<'ctx, T: DeserializeSeed<'ctx>, E> Value<'ctx, OwnedStatic<bool>> for Build } } -impl<'ctx, T: DeserializeSeed<'ctx>, E> Sequence<'ctx> for Builder<'ctx, T, E> { +impl<'ctx, T: DeserializeSeed<'ctx>, E> Sequence<'ctx, SyncEffect> for Builder<'ctx, 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, + { let pending = core::mem::replace(&mut self.0, Err(Error::Incomplete)); let Err(Error::Pending(value)) = pending else { todo!() @@ -162,7 +175,7 @@ impl<'a, 'ctx, T> Deserializer<'ctx> for InjectedValue<'a, 'ctx, T> { } } -struct SequenceAccess<'a, 'ctx, T>(&'a mut dyn SequenceScope<'ctx>, PhantomData<T>); +struct SequenceAccess<'a, 'ctx, T>(&'a mut dyn SequenceScope<'ctx, SyncEffect>, PhantomData<T>); impl<'a, 'ctx, T> SeqAccess<'ctx> for SequenceAccess<'a, 'ctx, T> { type Error = Error<T>; |