use crate::error::Result;
use alloc::boxed::Box;
pub mod memory;
#[cfg(feature = "std")]
#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
pub mod std_file;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct OpenFlags {
pub write: bool,
pub create: bool,
}
impl OpenFlags {
pub const READ_ONLY: OpenFlags = OpenFlags {
write: false,
create: false,
};
pub const READ_WRITE: OpenFlags = OpenFlags {
write: true,
create: false,
};
pub const READ_WRITE_CREATE: OpenFlags = OpenFlags {
write: true,
create: true,
};
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum LockLevel {
Unlocked,
Shared,
Reserved,
Pending,
Exclusive,
}
pub trait File {
fn read_exact_at(&self, buf: &mut [u8], offset: u64) -> Result<()>;
fn write_all_at(&mut self, buf: &[u8], offset: u64) -> Result<()>;
fn truncate(&mut self, size: u64) -> Result<()>;
fn sync(&mut self) -> Result<()>;
fn size(&self) -> Result<u64>;
fn lock(&mut self, _level: LockLevel) -> Result<()> {
Ok(())
}
fn unlock(&mut self, _level: LockLevel) -> Result<()> {
Ok(())
}
}
pub trait Vfs {
fn open(&self, path: &str, flags: OpenFlags) -> Result<Box<dyn File>>;
fn delete(&self, path: &str) -> Result<()>;
fn exists(&self, path: &str) -> Result<bool>;
}