extern crate bincode;
extern crate crc;
extern crate memmap;
extern crate page_size;
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate walkdir;
#[cfg(test)]
extern crate memadvise;
const FILEARCO_ID: &'static [u8; 8] = b"FILEARCO";
mod file_data;
pub mod v1;
pub use file_data::{get as get_file_data, FileData, FileDataError};
use std::error;
use std::fmt;
use std::io;
use std::result;
use std::str;
#[derive(Debug)]
pub enum Error {
Io(io::Error),
Utf8(str::Utf8Error),
Walkdir(walkdir::Error),
FileArcoV1(v1::FileArcoV1Error),
FileData(FileDataError),
}
impl fmt::Display for Error {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
match self {
&Error::Io(ref err) => err.fmt(fmt),
&Error::Utf8(ref err) => err.fmt(fmt),
&Error::Walkdir(ref err) => err.fmt(fmt),
&Error::FileArcoV1(ref err) => err.fmt(fmt),
&Error::FileData(ref err) => err.fmt(fmt),
}
}
}
impl error::Error for Error {
fn description(&self) -> &str {
match self {
&Error::Io(ref err) => err.description(),
&Error::Utf8(ref err) => err.description(),
&Error::Walkdir(ref err) => err.description(),
&Error::FileArcoV1(ref err) => err.description(),
&Error::FileData(ref err) => err.description(),
}
}
fn cause(&self) -> Option<&error::Error> {
match self {
&Error::Io(ref err) => err.cause(),
&Error::Utf8(ref err) => err.cause(),
&Error::Walkdir(ref err) => err.cause(),
&Error::FileArcoV1(ref err) => err.cause(),
&Error::FileData(ref err) => err.cause(),
}
}
}
impl From<io::Error> for Error {
fn from(err: io::Error) -> Error {
Error::Io(err)
}
}
impl From<str::Utf8Error> for Error {
fn from(err: str::Utf8Error) -> Error {
Error::Utf8(err)
}
}
impl From<walkdir::Error> for Error {
fn from(err: walkdir::Error) -> Error {
Error::Walkdir(err)
}
}
impl From<v1::FileArcoV1Error> for Error {
fn from(err: v1::FileArcoV1Error) -> Error {
Error::FileArcoV1(err)
}
}
pub type Result<T> = result::Result<T, Error>;