interact 0.3.6

A framework for online program state introspection
Documentation
use super::Access;

#[derive(Debug, Eq, PartialEq)]
pub enum StructKind {
    Unit,
    Tuple(usize),
    Fields(&'static [&'static str]),
}

#[derive(Debug, Eq, PartialEq)]
pub struct Struct {
    pub name: &'static str,
    pub kind: StructKind,
}

#[derive(Debug)]
pub struct Enum {
    pub name: &'static str,
    pub opts: &'static [&'static str],
}

pub trait ReflectStruct {
    fn get_desc(&self) -> Struct;
    fn get_field_by_name(&self, name: &'static str) -> Option<&dyn Access>;
    fn get_field_by_idx(&self, idx: usize) -> Option<&dyn Access>;
    fn get_field_by_name_mut(&mut self, name: &'static str) -> Option<&mut dyn Access>;
    fn get_field_by_idx_mut(&mut self, idx: usize) -> Option<&mut dyn Access>;
}

pub trait ReflectEnum {
    fn get_variant_desc(&self) -> Enum;
    fn get_variant_struct(&self) -> &dyn ReflectStruct;
    fn get_variant_struct_mut(&mut self) -> &mut dyn ReflectStruct;
}