use std::marker::PhantomData;
use crate::general::{DebugHandler, GeneralHandler, GeneralObserver, ReplaceHandler};
use crate::helper::{AsDeref, Invalidate, 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> Invalidate<T> for NoopHandler<T> {
fn invalidate(&mut self, _: &T) {}
}
impl<T: ?Sized> GeneralHandler for NoopHandler<T> {
type Target = T;
fn observe(_value: &T) -> Self {
Self(PhantomData)
}
}
impl<T: ?Sized> ReplaceHandler for NoopHandler<T> {
fn is_replace(&self, _value: &T) -> bool {
false
}
}
impl<T: ?Sized> DebugHandler for NoopHandler<T> {
const NAME: &'static str = "NoopObserver";
}