#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[non_exhaustive]
pub enum EntryType {
Regular,
Link,
Symlink,
Char,
Block,
Directory,
Fifo,
Continuous,
GNULongName,
GNULongLink,
GNUSparse,
XGlobalHeader,
XHeader,
Other(u8),
}
impl EntryType {
pub fn new(byte: u8) -> EntryType {
match byte {
b'\x00' | b'0' => EntryType::Regular,
b'1' => EntryType::Link,
b'2' => EntryType::Symlink,
b'3' => EntryType::Char,
b'4' => EntryType::Block,
b'5' => EntryType::Directory,
b'6' => EntryType::Fifo,
b'7' => EntryType::Continuous,
b'x' => EntryType::XHeader,
b'g' => EntryType::XGlobalHeader,
b'L' => EntryType::GNULongName,
b'K' => EntryType::GNULongLink,
b'S' => EntryType::GNUSparse,
other => EntryType::Other(other),
}
}
pub fn as_byte(self) -> u8 {
match self {
EntryType::Regular => b'0',
EntryType::Link => b'1',
EntryType::Symlink => b'2',
EntryType::Char => b'3',
EntryType::Block => b'4',
EntryType::Directory => b'5',
EntryType::Fifo => b'6',
EntryType::Continuous => b'7',
EntryType::XHeader => b'x',
EntryType::XGlobalHeader => b'g',
EntryType::GNULongName => b'L',
EntryType::GNULongLink => b'K',
EntryType::GNUSparse => b'S',
EntryType::Other(other) => other,
}
}
pub fn file() -> EntryType {
EntryType::Regular
}
pub fn hard_link() -> EntryType {
EntryType::Link
}
pub fn symlink() -> EntryType {
EntryType::Symlink
}
pub fn character_special() -> EntryType {
EntryType::Char
}
pub fn block_special() -> EntryType {
EntryType::Block
}
pub fn dir() -> EntryType {
EntryType::Directory
}
pub fn fifo() -> EntryType {
EntryType::Fifo
}
pub fn contiguous() -> EntryType {
EntryType::Continuous
}
pub fn is_file(self) -> bool {
self == EntryType::Regular
}
pub fn is_hard_link(self) -> bool {
self == EntryType::Link
}
pub fn is_symlink(self) -> bool {
self == EntryType::Symlink
}
pub fn is_character_special(self) -> bool {
self == EntryType::Char
}
pub fn is_block_special(self) -> bool {
self == EntryType::Block
}
pub fn is_dir(self) -> bool {
self == EntryType::Directory
}
pub fn is_fifo(self) -> bool {
self == EntryType::Fifo
}
pub fn is_contiguous(self) -> bool {
self == EntryType::Continuous
}
pub fn is_gnu_longname(self) -> bool {
self == EntryType::GNULongName
}
pub fn is_gnu_sparse(self) -> bool {
self == EntryType::GNUSparse
}
pub fn is_gnu_longlink(self) -> bool {
self == EntryType::GNULongLink
}
pub fn is_pax_global_extensions(self) -> bool {
self == EntryType::XGlobalHeader
}
pub fn is_pax_local_extensions(self) -> bool {
self == EntryType::XHeader
}
}