use thiserror::Error;
use tor_netdoc::parse2;
use std::num::ParseIntError;
#[derive(Clone, Debug, Error)]
#[non_exhaustive]
pub enum Error {
#[error("Invalid diff: {0}")]
BadDiff(&'static str),
#[error("Diff didn't apply to input: {0}")]
CantApply(&'static str),
#[error("Invalid input supplied: {0}")]
InvalidInput(parse2::ParseError),
#[error("Internal error")]
Bug(tor_error::Bug),
}
impl From<ParseIntError> for Error {
fn from(_e: ParseIntError) -> Error {
Error::BadDiff("can't parse line number")
}
}
impl From<hex::FromHexError> for Error {
fn from(_e: hex::FromHexError) -> Error {
Error::BadDiff("invalid hexadecimal in 'hash' line")
}
}
impl From<parse2::ParseError> for Error {
fn from(e: parse2::ParseError) -> Self {
Self::InvalidInput(e)
}
}
impl From<tor_error::Bug> for Error {
fn from(e: tor_error::Bug) -> Self {
Self::Bug(e)
}
}
#[derive(Clone, Debug, Error, PartialEq, Eq)]
pub(crate) enum GenEdDiffError {
#[error("Line {lno} does not end with a Unix line ending")]
MissingUnixLineEnding {
lno: usize,
},
#[error("Dotline found at {lno}")]
ContainsDotLine {
lno: usize,
},
#[error("Formatting error: {0}")]
Write(#[from] std::fmt::Error),
}