use crate::{
types::{EncryptedOffset, VolumeState},
VckResult,
};
pub trait SectorIo: Send + Sync {
fn sector_size(&self) -> u32;
fn total_sectors(&self) -> u64;
fn read_sectors(&self, lba: u64, buf: &mut [u8]) -> VckResult<()>;
fn write_sectors(&self, lba: u64, buf: &[u8]) -> VckResult<()>;
}
impl<T: SectorIo + ?Sized> SectorIo for alloc::sync::Arc<T> {
fn sector_size(&self) -> u32 {
(**self).sector_size()
}
fn total_sectors(&self) -> u64 {
(**self).total_sectors()
}
fn read_sectors(&self, lba: u64, buf: &mut [u8]) -> VckResult<()> {
(**self).read_sectors(lba, buf)
}
fn write_sectors(&self, lba: u64, buf: &[u8]) -> VckResult<()> {
(**self).write_sectors(lba, buf)
}
}
pub trait EncryptedOffsetStore: Send + Sync + 'static {
fn load(&self) -> VckResult<EncryptedOffset>;
fn store(&self, offset: &EncryptedOffset) -> VckResult<()>;
fn flush(&self) -> VckResult<()>;
fn load_state(&self) -> VckResult<VolumeState> {
Ok(VolumeState::Encrypt)
}
fn store_state(&self, _state: VolumeState) -> VckResult<()> {
Ok(())
}
}