[array (rust)] Implement Pack for restoration
This commit is contained in:
parent
7e2d69ede9
commit
a6e1870b2b
@ -1,3 +1,4 @@
|
|||||||
|
use byteorder::{LittleEndian, WriteBytesExt};
|
||||||
use nom::{multi::count, number::complete::*, IResult};
|
use nom::{multi::count, number::complete::*, IResult};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
@ -5,7 +6,7 @@ use thiserror::Error;
|
|||||||
use crate::checksum;
|
use crate::checksum;
|
||||||
use crate::io_engine::BLOCK_SIZE;
|
use crate::io_engine::BLOCK_SIZE;
|
||||||
use crate::pdata::btree;
|
use crate::pdata::btree;
|
||||||
use crate::pdata::unpack::Unpack;
|
use crate::pdata::unpack::{Pack, Unpack};
|
||||||
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
|
|
||||||
@ -44,11 +45,31 @@ impl Unpack for ArrayBlockHeader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Pack for ArrayBlockHeader {
|
||||||
|
fn pack<W: WriteBytesExt>(&self, w: &mut W) -> anyhow::Result<()> {
|
||||||
|
// csum needs to be calculated right for the whole metadata block.
|
||||||
|
w.write_u32::<LittleEndian>(0)?;
|
||||||
|
w.write_u32::<LittleEndian>(self.max_entries)?;
|
||||||
|
w.write_u32::<LittleEndian>(self.nr_entries)?;
|
||||||
|
w.write_u32::<LittleEndian>(self.value_size)?;
|
||||||
|
w.write_u64::<LittleEndian>(self.blocknr)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
|
||||||
pub struct ArrayBlock<V: Unpack> {
|
pub struct ArrayBlock<V: Unpack> {
|
||||||
pub header: ArrayBlockHeader,
|
pub header: ArrayBlockHeader,
|
||||||
pub values: Vec<V>,
|
pub values: Vec<V>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<V: Unpack> ArrayBlock<V> {
|
||||||
|
pub fn set_block(&mut self, b: u64) {
|
||||||
|
self.header.blocknr = b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
|
|
||||||
#[derive(Error, Clone, Debug)]
|
#[derive(Error, Clone, Debug)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user