use effectful::{
effective::{Canonical, Effective},
environment::Environment,
SendSync,
};
use crate::{
any::AnyTrait,
protocol::{visitor::VisitResult, DynVisitor},
walk::DynWalkerObjSafe,
};
pub mod tracer;
// pub mod array;
pub mod bool;
pub mod value;
// pub mod option;
// pub mod variant;
// pub mod r#enum;
// pub mod r#struct;
pub mod tag_name;
#[derive(Default, SendSync)]
#[non_exhaustive]
pub struct NoopVisitor;
impl NoopVisitor {
pub fn new() -> Self {
Self
}
}
impl<'src> AnyTrait<'src> for NoopVisitor {}
impl NoopVisitor {
pub fn walk_dyn<'r, E: Environment>(
walker: DynWalkerObjSafe<'r, '_, E>,
) -> Canonical<'r, VisitResult, E> {
E::value(NoopVisitor::new())
.update_map(walker, |walker, noop| {
walker
.walk(DynVisitor::new(noop))
.map((), |_, x| x.to_continue().into())
.cast()
})
.map((), |_, (_, x)| x)
.cast()
}
}