use anyhow::Result; //------------------------------------------ #[derive(Clone)] pub struct Superblock { pub uuid: String, pub block_size: u32, pub nr_cache_blocks: u32, pub policy: String, pub hint_width: u32, } #[derive(Clone)] pub struct Map { pub cblock: u32, pub oblock: u64, pub dirty: bool, } #[derive(Clone)] pub struct Hint { pub cblock: u32, pub data: Vec, } #[derive(Clone)] pub struct Discard { pub begin: u64, pub end: u64, } //------------------------------------------ #[derive(Clone)] pub enum Visit { Continue, Stop, } pub trait MetadataVisitor { fn superblock_b(&mut self, sb: &Superblock) -> Result; fn superblock_e(&mut self) -> Result; fn mappings_b(&mut self) -> Result; fn mappings_e(&mut self) -> Result; fn mapping(&mut self, m: &Map) -> Result; fn hints_b(&mut self) -> Result; fn hints_e(&mut self) -> Result; fn hint(&mut self, h: &Hint) -> Result; fn discards_b(&mut self) -> Result; fn discards_e(&mut self) -> Result; fn discard(&mut self, d: &Discard) -> Result; fn eof(&mut self) -> Result; } //------------------------------------------