Skip to main content

ahrightos_fs/
file.rs

1use core::fmt;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum FileError {
5    NotFound,
6    PermissionDenied,
7    EndOfFile,
8    InvalidOperation,
9    IoError,
10    AlreadyExists,
11    NotDirectory,
12    IsDirectory,
13    WouldBlock,
14}
15
16impl fmt::Display for FileError {
17    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18        match self {
19            Self::NotFound => write!(f, "File not found"),
20            Self::PermissionDenied => write!(f, "Permission denied"),
21            Self::EndOfFile => write!(f, "End of file"),
22            Self::InvalidOperation => write!(f, "Invalid operation"),
23            Self::IoError => write!(f, "I/O error"),
24            Self::AlreadyExists => write!(f, "File already exists"),
25            Self::NotDirectory => write!(f, "Not a directory"),
26            Self::IsDirectory => write!(f, "Is a directory"),
27            Self::WouldBlock => write!(f, "Operation would block"),
28        }
29    }
30}
31
32#[derive(Debug, Clone, Copy, PartialEq, Eq)]
33pub enum SeekFrom {
34    Start(usize),
35    Current(isize),
36    End(isize),
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq)]
40pub enum FileType {
41    RegularFile,
42    Directory,
43    SymbolicLink,
44    CharDevice,
45    BlockDevice,
46    Pipe,
47}
48
49#[derive(Debug, Clone, PartialEq, Eq)]
50pub struct FileMetadata {
51    pub file_type: FileType,
52    pub size: usize,
53    pub mode: u32,
54    pub created: u64,
55    pub modified: u64,
56}
57
58pub trait File: Send + Sync {
59    fn read(&mut self, buf: &mut [u8]) -> Result<usize, FileError>;
60
61    fn write(&mut self, buf: &[u8]) -> Result<usize, FileError>;
62
63    fn seek(&mut self, _pos: SeekFrom) -> Result<usize, FileError> {
64        Err(FileError::InvalidOperation)
65    }
66}