Skip to main content

interact/access/
basic.rs

1use std::borrow::Cow;
2use std::sync::Arc;
3
4use crate::access::ReflectDirect;
5use crate::climber::{ClimbError, Climber};
6use crate::node_tree::{NodeInfo, NodeTree};
7use crate::reflector::Reflector;
8
9use interact_derive::derive_interact_basic;
10
11macro_rules! simple {
12    ($a:tt, $fmt:expr) => {
13        derive_interact_basic! {
14            #[interact(mut_assign)]
15            struct $a;
16        }
17
18        impl ReflectDirect for $a {
19            fn immut_reflector(&self, reflector: &Arc<Reflector>) -> NodeTree {
20                let obj_ptr = ((self as *const _) as usize, 0);
21                let meta = match Reflector::seen_ptr(reflector, obj_ptr) {
22                    Ok(v) => return v,
23                    Err(meta) => meta,
24                };
25                NodeInfo::Leaf(Cow::Owned(format!($fmt, self))).with_meta(meta)
26            }
27
28            fn immut_climber<'a>(
29                &self,
30                _climber: &mut Climber<'a>,
31            ) -> Result<Option<NodeTree>, ClimbError> {
32                Ok(None)
33            }
34
35            fn mut_climber<'a>(
36                &mut self,
37                _climber: &mut Climber<'a>,
38            ) -> Result<Option<NodeTree>, ClimbError> {
39                Ok(None)
40            }
41        }
42    };
43}
44
45simple!(usize, "{}");
46simple!(u64, "{}");
47simple!(u32, "{}");
48simple!(u16, "{}");
49simple!(u8, "{}");
50simple!(isize, "{}");
51simple!(bool, "{}");
52simple!(String, "{:?}");
53simple!(char, "{:?}");
54simple!(i64, "{}");
55simple!(i32, "{}");
56simple!(i16, "{}");
57simple!(i8, "{}");