Crate refview

Source
Expand description

Motivation: easily generate a “Viewer” struct that has some fields that reference another struct.

Example input:

#[derive(RefView)]
struct DataStruct {
    field0: f64,
    field1: u64,
    field2: isize,
    field3: Vec<Box<usize>>,
}

This would (roughly) generate the following code:

pub struct DataStructViewer<'a> {
    pub field0: &'a f64,
    pub field1: &'a u64,
    pub field2: &'a isize,
    pub field3: &'a Vec<Box<usize>>,
}
 
impl<'a> RefView<'a> for DataStruct {
    type Viewer = DataStructViewer<'a>;
    fn view(&'a self) -> Self::Viewer
    where
        Self::Viewer: 'a,
    {
        Self::Viewer {
            field0: &self.field0,
            field1: &self.field1,
            field2: &self.field2,
            field3: &self.field3,
        }
    }
}

Mutable referenced structs can be generated with RefViewMut.

§Planned features

  • Make some fields skip-able or include them though field attributes
  • More control over visability of generated struct

Traits§

RefView
Trait to “view” into a struct
RefViewMut
Trait to mutably “view” into a struct

Derive Macros§

RefView
RefViewMut