use crate::Result;
use crate::block::BlockDevice;
pub struct Cursor {
pos: u64,
capacity: u64,
}
impl Cursor {
pub fn new(dev: &dyn BlockDevice) -> Self {
Self {
pos: 0,
capacity: dev.total_size(),
}
}
pub fn position(&self) -> u64 {
self.pos
}
pub fn write(&mut self, dev: &mut dyn BlockDevice, buf: &[u8]) -> Result<()> {
if self.pos + buf.len() as u64 > self.capacity {
return Err(crate::Error::OutOfBounds {
offset: self.pos,
len: buf.len() as u64,
size: self.capacity,
});
}
dev.write_at(self.pos, buf)?;
self.pos += buf.len() as u64;
Ok(())
}
}