#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum EntryType {
Regular,
Link,
Symlink,
Char,
Block,
Directory,
Fifo,
Continuous,
GNULongName,
GNULongLink,
XGlobalHeader,
XHeader,
#[doc(hidden)]
__Nonexhaustive(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 => EntryType::__Nonexhaustive(b),
}
}
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::__Nonexhaustive(b) => b,
}
}
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_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
}
}