pub use crate::ebook::archive::errors::ArchiveError;
pub use crate::ebook::archive::errors::ArchiveResult;
use crate::ebook::epub::errors::EpubError;
use crate::reader::errors::ReaderError;
use std::char::DecodeUtf16Error;
use std::error::Error;
use std::string::FromUtf8Error;
use thiserror::Error;
pub type EbookResult<T> = Result<T, EbookError>;
#[non_exhaustive]
#[derive(thiserror::Error, Debug)]
pub enum EbookError {
#[error(transparent)]
Archive(#[from] ArchiveError),
#[error(transparent)]
Format(#[from] FormatError),
#[error(transparent)]
Reader(ReaderError),
#[cfg(feature = "write")]
#[error(transparent)]
Io(#[from] std::io::Error),
}
impl From<ReaderError> for EbookError {
fn from(reader_error: ReaderError) -> Self {
match reader_error {
ReaderError::Archive(error) => EbookError::Archive(error),
ReaderError::Format(error) => EbookError::Format(error),
error => EbookError::Reader(error),
}
}
}
#[non_exhaustive]
#[derive(thiserror::Error, Debug)]
pub enum FormatError {
#[error(transparent)]
Unparsable(#[from] Box<dyn Error + Send + Sync + 'static>),
#[error(transparent)]
Epub(#[from] EpubError),
}
#[derive(Error, Debug)]
pub enum UtfError {
#[error("UTF-16 data needs to contain an even amount of bytes")]
UnevenByteCount(usize),
#[error(transparent)]
InvalidUtf8(#[from] FromUtf8Error),
#[error(transparent)]
UndecodableUtf16(#[from] DecodeUtf16Error),
}