strat9_components_api/
lib.rs1#![no_std]
11
12extern crate alloc;
13
14use alloc::sync::Arc;
15
16pub use strate_fs_abstraction::error::{FsError, FsResult};
21
22#[derive(Debug, Clone, Copy)]
23pub enum FileType {
24 Regular,
25 Directory,
26 Symlink,
27 Other,
28}
29
30#[derive(Debug)]
31pub struct FileStat {
32 pub size: u64,
33 pub file_type: FileType,
34 pub permissions: u8,
35 pub modified: u64,
36}
37
38pub trait BlockDevice: Send + Sync {
39 fn read_at(&self, offset: u64, buf: &mut [u8]) -> FsResult<usize>;
41 fn write_at(&self, offset: u64, data: &[u8]) -> FsResult<usize>;
43 fn size(&self) -> u64;
45}
46
47pub trait FileSystem: Send + Sync {
48 fn mount(&mut self, device: Arc<dyn BlockDevice>) -> FsResult<()>;
50 fn unmount(&mut self) -> FsResult<()>;
52 fn lookup(&self, path: &str) -> FsResult<u64>;
54 fn read(&self, ino: u64, offset: u64, buf: &mut [u8]) -> FsResult<usize>;
56 fn write(&mut self, ino: u64, offset: u64, buf: &[u8]) -> FsResult<usize>;
58 fn create(&mut self, parent: u64, name: &str, file_type: FileType) -> FsResult<u64>;
60 fn remove(&mut self, parent: u64, name: &str) -> FsResult<()>;
62 fn stat(&self, ino: u64) -> FsResult<FileStat>;
64 fn readdir(&self, ino: u64) -> FsResult<alloc::vec::Vec<(alloc::string::String, u64)>>;
66}
67
68pub struct FileHandle {
69 pub ino: u64,
70 pub offset: u64,
71}