diff --git a/src/backup/catalog.rs b/src/backup/catalog.rs index 5bf0ed0b..ee0cfb8b 100644 --- a/src/backup/catalog.rs +++ b/src/backup/catalog.rs @@ -1,4 +1,5 @@ use failure::*; +use std::fmt; use std::ffi::{CStr, CString, OsStr}; use std::os::unix::ffi::OsStrExt; use std::io::{Read, Write, Seek, SeekFrom}; @@ -8,9 +9,46 @@ use chrono::offset::{TimeZone, Local}; use proxmox::tools::io::ReadExt; -use crate::pxar::catalog::{BackupCatalogWriter, CatalogEntryType}; +use crate::pxar::catalog::BackupCatalogWriter; use crate::backup::file_formats::PROXMOX_CATALOG_FILE_MAGIC_1_0; +#[repr(u8)] +#[derive(Copy,Clone,PartialEq)] +pub enum CatalogEntryType { + Directory = b'd', + File = b'f', + Symlink = b'l', + Hardlink = b'h', + BlockDevice = b'b', + CharDevice = b'c', + Fifo = b'p', // Fifo,Pipe + Socket = b's', +} + +impl TryFrom for CatalogEntryType { + type Error=Error; + + fn try_from(value: u8) -> Result { + Ok(match value { + b'd' => CatalogEntryType::Directory, + b'f' => CatalogEntryType::File, + b'l' => CatalogEntryType::Symlink, + b'h' => CatalogEntryType::Hardlink, + b'b' => CatalogEntryType::BlockDevice, + b'c' => CatalogEntryType::CharDevice, + b'p' => CatalogEntryType::Fifo, + b's' => CatalogEntryType::Socket, + _ => bail!("invalid CatalogEntryType value '{}'", char::from(value)), + }) + } +} + +impl fmt::Display for CatalogEntryType { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", char::from(*self as u8)) + } +} + struct DirEntry { name: Vec, attr: DirEntryAttribute, diff --git a/src/pxar/catalog.rs b/src/pxar/catalog.rs index d8e6b1d0..e56b3c4a 100644 --- a/src/pxar/catalog.rs +++ b/src/pxar/catalog.rs @@ -4,46 +4,7 @@ //! may be used as index to do a fast search for files. use failure::*; -use std::convert::TryFrom; use std::ffi::CStr; -use std::fmt; - -#[repr(u8)] -#[derive(Copy,Clone,PartialEq)] -pub enum CatalogEntryType { - Directory = b'd', - File = b'f', - Symlink = b'l', - Hardlink = b'h', - BlockDevice = b'b', - CharDevice = b'c', - Fifo = b'p', // Fifo,Pipe - Socket = b's', -} - -impl TryFrom for CatalogEntryType { - type Error=Error; - - fn try_from(value: u8) -> Result { - Ok(match value { - b'd' => CatalogEntryType::Directory, - b'f' => CatalogEntryType::File, - b'l' => CatalogEntryType::Symlink, - b'h' => CatalogEntryType::Hardlink, - b'b' => CatalogEntryType::BlockDevice, - b'c' => CatalogEntryType::CharDevice, - b'p' => CatalogEntryType::Fifo, - b's' => CatalogEntryType::Socket, - _ => bail!("invalid CatalogEntryType value '{}'", char::from(value)), - }) - } -} - -impl fmt::Display for CatalogEntryType { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", char::from(*self as u8)) - } -} pub trait BackupCatalogWriter { fn start_directory(&mut self, name: &CStr) -> Result<(), Error>;