use crate::internal::NoInput;
#[derive(Clone, Copy, Debug)]
pub(crate) enum ParseErrorKind {
InvalidOctet,
UnexpectedChar,
InvalidIpv6Addr,
NoScheme,
}
#[derive(Clone, Copy)]
pub struct ParseError<I = NoInput> {
pub(crate) index: usize,
pub(crate) kind: ParseErrorKind,
pub(crate) input: I,
}
impl ParseError {
pub(crate) fn with_input<I>(self, input: I) -> ParseError<I> {
ParseError {
index: self.index,
kind: self.kind,
input,
}
}
}
impl<I: AsRef<str>> ParseError<I> {
#[must_use]
pub fn into_input(self) -> I {
self.input
}
#[must_use]
pub fn strip_input(&self) -> ParseError {
ParseError {
index: self.index,
kind: self.kind,
input: NoInput,
}
}
}
#[cfg(feature = "std")]
impl<I> std::error::Error for ParseError<I> {}
#[derive(Clone, Copy, Debug)]
pub(crate) enum BuildErrorKind {
NonAbemptyPath,
PathStartingWithDoubleSlash,
ColonInFirstPathSegment,
}
#[derive(Clone, Copy, Debug)]
pub struct BuildError(pub(crate) BuildErrorKind);
#[cfg(feature = "std")]
impl std::error::Error for BuildError {}
#[derive(Clone, Copy, Debug)]
pub(crate) enum ResolveErrorKind {
InvalidBase,
OpaqueBase,
}
#[derive(Clone, Copy, Debug)]
pub struct ResolveError(pub(crate) ResolveErrorKind);
#[cfg(feature = "std")]
impl std::error::Error for ResolveError {}