use std::marker::PhantomData;
use crate::general::{DebugHandler, GeneralHandler, GeneralObserver, ReplaceHandler};
use crate::helper::{AsDeref, ObserverState, Zero};
pub type NoopObserver<'ob, S, D = Zero> = GeneralObserver<'ob, NoopHandler<<S as AsDeref<D>>::Target>, S, D>;
pub struct NoopHandler<T: ?Sized>(PhantomData<T>);
impl<T: ?Sized> ObserverState for NoopHandler<T> {
type Target = T;
fn invalidate(_: &mut Self, _: &T) {}
}
impl<T: ?Sized> GeneralHandler for NoopHandler<T> {
fn observe(_value: &T) -> Self {
Self(PhantomData)
}
}
impl<T: ?Sized> ReplaceHandler for NoopHandler<T> {
unsafe fn is_replace(&self, _value: &T) -> bool {
false
}
}
impl<T: ?Sized> DebugHandler for NoopHandler<T> {
const NAME: &'static str = "NoopObserver";
}