use std::ffi::OsStr;
use std::io::IoSlice;
use crate::FileType;
use crate::INodeNo;
use crate::ll::ioslice_concat::IosliceConcat;
use crate::ll::reply::DirEntList;
use crate::ll::reply::DirEntOffset;
use crate::ll::reply::DirEntry;
use crate::ll::reply::Response;
#[derive(Debug)]
pub struct DirectoryResponse {
data: DirEntList,
}
impl DirectoryResponse {
pub fn new(size: usize) -> DirectoryResponse {
DirectoryResponse {
data: DirEntList::new(size),
}
}
#[must_use]
pub fn add<T: AsRef<OsStr>>(
&mut self,
ino: INodeNo,
offset: u64,
kind: FileType,
name: T,
) -> bool {
let name = name.as_ref();
self.data
.push(&DirEntry::new(ino, DirEntOffset(offset), kind, name))
}
}
impl Response for DirectoryResponse {
fn payload(&self) -> impl IosliceConcat {
[IoSlice::new(self.data.as_bytes())]
}
}