use std::path::PathBuf;
use std::time::SystemTime;
use remotefs::fs::{FileType, Metadata, UnixPex};
#[derive(Debug, Clone)]
pub struct Inode {
pub(crate) metadata: Metadata,
pub(crate) content: Option<Vec<u8>>,
}
impl Inode {
pub fn dir(uid: u32, gid: u32, mode: UnixPex) -> Self {
Self {
metadata: Metadata::default()
.uid(uid)
.gid(gid)
.file_type(FileType::Directory)
.created(SystemTime::now())
.accessed(SystemTime::now())
.mode(mode),
content: None,
}
}
pub fn file(uid: u32, gid: u32, mode: UnixPex, data: Vec<u8>) -> Self {
Self {
metadata: Metadata::default()
.uid(uid)
.gid(gid)
.file_type(FileType::File)
.created(SystemTime::now())
.accessed(SystemTime::now())
.mode(mode)
.size(data.len() as u64),
content: Some(data),
}
}
pub fn symlink(uid: u32, gid: u32, target: PathBuf) -> Self {
Self {
metadata: Metadata::default()
.uid(uid)
.gid(gid)
.file_type(FileType::Symlink)
.created(SystemTime::now())
.accessed(SystemTime::now())
.mode(UnixPex::from(0o777))
.symlink(target.clone()),
content: Some(target.to_string_lossy().as_bytes().to_vec()),
}
}
pub fn metadata(&self) -> &Metadata {
&self.metadata
}
pub fn content(&self) -> Option<&[u8]> {
self.content.as_deref()
}
}