use std::error::Error;
use std::fmt;
#[derive(Debug, PartialEq)]
pub struct ErrorTrace {
messages: Vec<String>,
}
impl ErrorTrace {
pub fn new(message_string: String) -> Self {
Self {
messages: vec![message_string],
}
}
pub fn add_frame(&mut self, message_string: String) {
self.messages.push(message_string);
}
}
impl Error for ErrorTrace {}
impl fmt::Display for ErrorTrace {
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
write!(
formatter,
"{}",
self.messages
.iter()
.enumerate()
.map(|(frame_index, message_string)| format!("#{} {}", frame_index, message_string))
.collect::<Vec<String>>()
.join("\n")
)
}
}