use crate::Token;
use std::fmt::Debug;
#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug)]
pub struct Error<'a, E: Debug> {
token: Token<'a>,
error: E,
}
impl<'a, E: Debug> Error<'a, E> {
pub fn new(token: Token<'a>, error: E) -> Self {
Self { token, error }
}
}
impl<'a, E: Debug> Error<'a, E> {
pub fn token(&self) -> Token<'a> {
self.token
}
pub fn error(&self) -> &E {
&self.error
}
pub fn to_error(self) -> E {
self.error
}
}
impl<'a, E: Debug> Error<'a, E> {
pub fn map<F, E2>(self, map_fn: F) -> Error<'a, E2>
where
F: Fn(E) -> E2,
E2: Debug,
{
let token: Token = self.token;
let error: E2 = map_fn(self.error);
Error { token, error }
}
}