1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use crate::{
    any::static_wrapper::OwnedStatic,
    protocol::{visitor::Value, Effect},
};
use core::{mem::MaybeUninit, ops::ControlFlow};

use crate::{
    any_trait,
    protocol::{
        visitor::{RequestHint, Sequence, SequenceScope, Status},
        walker::{Hint, HintMeta},
        ControlFlowFor, SyncEffect, Visitor,
    },
};

impl<'a, 'ctx> crate::Walk<'a, 'ctx> for bool {
    type Walker = Walker;
}

pub struct Walker(bool);

impl<'ctx> From<bool> for Walker {
    fn from(value: bool) -> Self {
        Self(value)
    }
}

impl<'a, 'ctx> crate::Walker<'a, 'ctx> for Walker {
    type Effect = SyncEffect;

    type Error = ();

    type Output = ();

    #[inline]
    fn walk(
        self,
        visitor: Visitor<'a, 'ctx, SyncEffect>,
    ) -> ControlFlowFor<'a, 'ctx, Self::Effect, Self::Output, Self::Error> {
        {
            if let Some(object) = visitor.upcast_mut::<dyn Value<'_, OwnedStatic<bool>> + '_>() {
                object.visit(OwnedStatic(self.0));
            }

            ControlFlow::Continue(())
        }
    }
}