use displaydoc::Display;
use thiserror::Error;
use std::io;
use std::num::TryFromIntError;
use std::ops::{Range, RangeInclusive};
pub type ZipResult<T> = Result<T, ZipError>;
#[derive(Debug, Display, Error)]
pub enum ZipError {
Io(#[from] io::Error),
InvalidArchive(&'static str),
UnsupportedArchive(&'static str),
FileNotFound,
InvalidPassword,
}
impl ZipError {
pub const PASSWORD_REQUIRED: &'static str = "Password required to decrypt file";
}
impl From<ZipError> for io::Error {
fn from(err: ZipError) -> io::Error {
io::Error::new(io::ErrorKind::Other, err)
}
}
#[derive(Debug, Display, Error)]
pub enum DateTimeRangeError {
InvalidYear(u16, RangeInclusive<u16>),
InvalidMonth(u8, RangeInclusive<u8>),
InvalidDay(u8, RangeInclusive<u8>),
InvalidHour(u8, Range<u8>),
InvalidMinute(u8, Range<u8>),
InvalidSecond(u8, RangeInclusive<u8>),
NumericConversion(&'static str, #[source] TryFromIntError),
}