use std::fmt::Display;
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd)]
pub enum ADBListItemType {
Fifo(ADBListItem),
CharacterDevice(ADBListItem),
Directory(ADBListItem),
BlockDevice(ADBListItem),
File(ADBListItem),
Symlink(ADBListItem),
Socket(ADBListItem),
Other(ADBListItem),
}
impl ADBListItemType {
pub(crate) const fn from_mode_and_entry(mode: u32, entry: ADBListItem) -> Self {
match ((mode >> 13) & 0b111) as u8 {
0b000 => Self::Fifo(entry), 0b001 => Self::CharacterDevice(entry), 0b010 => Self::Directory(entry), 0b011 => Self::BlockDevice(entry), 0b100 => Self::File(entry), 0b101 => Self::Symlink(entry), 0b110 => Self::Socket(entry), _ => Self::Other(entry), }
}
}
impl Display for ADBListItemType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Fifo(item) => write!(f, "fifo: {item}"),
Self::CharacterDevice(item) => write!(f, "character device: {item}"),
Self::Directory(item) => write!(f, "directory: {item}"),
Self::BlockDevice(item) => write!(f, "block device: {item}"),
Self::File(item) => write!(f, "file: {item}"),
Self::Symlink(item) => write!(f, "symlink: {item}"),
Self::Socket(item) => write!(f, "socket: {item}"),
Self::Other(item) => write!(f, "other: {item}"),
}
}
}
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd)]
pub struct ADBListItem {
pub name: String,
pub time: u32,
pub permissions: u32,
pub size: u32,
}
impl Display for ADBListItem {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"name: {}, time: {}, size: {}, permissions: {:#o}",
self.name, self.time, self.size, self.permissions
)
}
}