use crate::archive::{DirEntry, FileEntry, SymlinkEntry};
#[derive(Debug)]
pub enum Entry<'a> {
File(FileEntry<'a>),
Directory(DirEntry<'a>),
Symlink(SymlinkEntry<'a>),
}
impl<'a> Entry<'a> {
#[must_use]
pub fn is_file(&self) -> bool {
matches!(self, Self::File(_))
}
#[must_use]
pub fn is_directory(&self) -> bool {
matches!(self, Self::Directory(_))
}
#[must_use]
pub fn is_symlink(&self) -> bool {
matches!(self, Self::Symlink(_))
}
#[must_use]
pub fn as_file(&self) -> Option<&FileEntry<'a>> {
match self {
Self::File(f) => Some(f),
_ => None,
}
}
#[must_use]
pub fn as_directory(&self) -> Option<&DirEntry<'a>> {
match self {
Self::Directory(d) => Some(d),
_ => None,
}
}
#[must_use]
pub fn as_symlink(&self) -> Option<&SymlinkEntry<'a>> {
match self {
Self::Symlink(s) => Some(s),
_ => None,
}
}
#[must_use]
pub fn into_file(self) -> Option<FileEntry<'a>> {
match self {
Self::File(f) => Some(f),
_ => None,
}
}
#[must_use]
pub fn into_directory(self) -> Option<DirEntry<'a>> {
match self {
Self::Directory(d) => Some(d),
_ => None,
}
}
#[must_use]
pub fn into_symlink(self) -> Option<SymlinkEntry<'a>> {
match self {
Self::Symlink(s) => Some(s),
_ => None,
}
}
}
impl<'a> From<FileEntry<'a>> for Entry<'a> {
fn from(entry: FileEntry<'a>) -> Self {
Self::File(entry)
}
}
impl<'a> From<DirEntry<'a>> for Entry<'a> {
fn from(entry: DirEntry<'a>) -> Self {
Self::Directory(entry)
}
}
impl<'a> From<SymlinkEntry<'a>> for Entry<'a> {
fn from(entry: SymlinkEntry<'a>) -> Self {
Self::Symlink(entry)
}
}