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 49 50 51 52 53 54 55 56 57
use std::borrow::Cow; use std::sync::Arc; use crate::access::ReflectDirect; use crate::climber::{ClimbError, Climber}; use crate::node_tree::{NodeInfo, NodeTree}; use crate::reflector::Reflector; use interact_derive::derive_interact_basic; macro_rules! simple { ($a:tt, $fmt:expr) => { derive_interact_basic! { #[interact(mut_assign)] struct $a; } impl ReflectDirect for $a { fn immut_reflector(&self, reflector: &Arc<Reflector>) -> NodeTree { let obj_ptr = ((self as *const _) as usize, 0); let meta = match Reflector::seen_ptr(reflector, obj_ptr) { Ok(v) => return v, Err(meta) => meta, }; NodeInfo::Leaf(Cow::Owned(format!($fmt, self))).with_meta(meta) } fn immut_climber<'a>( &self, _climber: &mut Climber<'a>, ) -> Result<Option<NodeTree>, ClimbError> { Ok(None) } fn mut_climber<'a>( &mut self, _climber: &mut Climber<'a>, ) -> Result<Option<NodeTree>, ClimbError> { Ok(None) } } }; } simple!(usize, "{}"); simple!(u64, "{}"); simple!(u32, "{}"); simple!(u16, "{}"); simple!(u8, "{}"); simple!(isize, "{}"); simple!(bool, "{}"); simple!(String, "{:?}"); simple!(char, "{:?}"); simple!(i64, "{}"); simple!(i32, "{}"); simple!(i16, "{}"); simple!(i8, "{}");