use core::error::Error; use std::fmt; use crate::position::*; #[derive(Debug)] pub struct CrimError { position: Position, what: String, } impl CrimError { pub fn parse( position: Position, what: String ) -> Self { Self { position, what, } } pub fn other(what: String) -> Self { Self { position: Position::none(), what, } } pub fn eos( context: &str ) -> Self { Self { position: Position::none(), what: format!("Premature end of stream while looking for {}", context), } } pub fn what(&self) -> &str { &self.what } pub fn start(&self) -> &Position { &self.position } } impl fmt::Display for CrimError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "Error parsing input: {}", "yeah") } } impl Error for CrimError { } pub type CrimResult = Result;