refactor(storage-server): add SectorId, FileName, PackedPath newtypes, eliminate raw primitives and DRY violations
This commit is contained in:
@@ -11,27 +11,57 @@ impl FileHandle {
|
||||
}
|
||||
}
|
||||
|
||||
pub const MAX_FILE_NAME: usize = 32;
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct FileName {
|
||||
bytes: [u8; MAX_FILE_NAME],
|
||||
len: u8,
|
||||
}
|
||||
|
||||
impl FileName {
|
||||
pub fn empty() -> Self {
|
||||
Self { bytes: [0; MAX_FILE_NAME], len: 0 }
|
||||
}
|
||||
|
||||
pub fn from_bytes(src: &[u8]) -> Self {
|
||||
let mut name = Self::empty();
|
||||
let len = src.len().min(MAX_FILE_NAME);
|
||||
name.bytes[..len].copy_from_slice(&src[..len]);
|
||||
name.len = len as u8;
|
||||
name
|
||||
}
|
||||
|
||||
pub fn as_bytes(&self) -> &[u8] {
|
||||
&self.bytes[..self.len as usize]
|
||||
}
|
||||
|
||||
pub fn len(&self) -> usize {
|
||||
self.len as usize
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialEq<[u8]> for FileName {
|
||||
fn eq(&self, other: &[u8]) -> bool {
|
||||
self.as_bytes() == other
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct DirEntry {
|
||||
pub name: [u8; 32],
|
||||
pub name_len: u8,
|
||||
pub size: u32,
|
||||
pub name: FileName,
|
||||
pub size: usize,
|
||||
pub is_dir: bool,
|
||||
}
|
||||
|
||||
impl DirEntry {
|
||||
pub fn empty() -> Self {
|
||||
Self {
|
||||
name: [0; 32],
|
||||
name_len: 0,
|
||||
name: FileName::empty(),
|
||||
size: 0,
|
||||
is_dir: false,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn name_bytes(&self) -> &[u8] {
|
||||
&self.name[..self.name_len as usize]
|
||||
}
|
||||
}
|
||||
|
||||
pub trait FileSystem {
|
||||
|
||||
Reference in New Issue
Block a user