#[cfg(feature = "alloc")]
mod validator;
use core::any::TypeId;
use rancor::{Fallible, Strategy};
#[cfg(feature = "alloc")]
pub use self::validator::*;
use crate::de::{ErasedPtr, Metadata};
pub enum ValidationState {
Started,
Pending,
Finished,
}
pub trait SharedContext<E = <Self as Fallible>::Error> {
fn start_shared(
&mut self,
shared_type_id: TypeId,
ptr: ErasedPtr,
metadata_is_eq: unsafe fn(Metadata, Metadata) -> bool,
) -> Result<ValidationState, E>;
fn finish_shared(
&mut self,
shared_type_id: TypeId,
ptr: ErasedPtr,
) -> Result<(), E>;
}
impl<T, E> SharedContext<E> for Strategy<T, E>
where
T: SharedContext<E>,
{
fn start_shared(
&mut self,
shared_type_id: TypeId,
ptr: ErasedPtr,
metadata_is_eq: unsafe fn(Metadata, Metadata) -> bool,
) -> Result<ValidationState, E> {
T::start_shared(self, shared_type_id, ptr, metadata_is_eq)
}
fn finish_shared(
&mut self,
shared_type_id: TypeId,
ptr: ErasedPtr,
) -> Result<(), E> {
T::finish_shared(self, shared_type_id, ptr)
}
}