refactor(storage-server): add SectorId, FileName, PackedPath newtypes, eliminate raw primitives and DRY violations

This commit is contained in:
2026-10-18 03:41:14 +02:00
parent 7a4600b3a2
commit 2dc503e07e
8 changed files with 162 additions and 111 deletions

View File

@@ -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 {