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