use std::num::ParseIntError;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum ManicError {
#[error("Failed to parse content-length")]
LenParse(#[from] ParseIntError),
#[error("Content length is 0")]
NoLen,
#[error("IO error: {0}")]
IOError(#[from] std::io::Error),
#[error("Network error: {0}")]
NetError(#[from] reqwest::Error),
#[error("Header to string error: {0}")]
ToStr(#[from] reqwest::header::ToStrError),
#[error("No filename in url {0}")]
NoFilename(String),
#[error("URL parsing error: {0}")]
UrlParseError(#[from] url::ParseError),
#[error("SHA sum mismatch: {0}")]
SHA256MisMatch(String),
#[error("Chunk size cannot be 0")]
BadChunkSize,
#[error("Not found")]
NotFound,
#[error("No results found")]
NoResults,
#[cfg(feature = "threaded")]
#[error("Canceled: {0}")]
Canceled(#[from] futures_channel::oneshot::Canceled),
#[cfg(feature = "async")]
#[error("Join error: {0}")]
JoinError(#[from] tokio::task::JoinError),
#[error("PoisonError: {0}")]
PoisonError(String),
#[error("{0}")]
MultipleErrors(String),
}
pub type Result<T> = std::result::Result<T, ManicError>;
impl<I: Into<ManicError>> From<Vec<I>> for ManicError {
fn from(errs: Vec<I>) -> Self {
let mut msg = String::new();
for i in errs {
msg += &format!("- [{}]\n", i.into());
}
Self::MultipleErrors(msg)
}
}