use std::fmt::Debug;
use std::fmt::Display;
#[derive(Clone)]
pub struct Backtrace<Term, NonTerm> {
pub traces: Vec<Vec<crate::rule::ShiftedRule<Term, NonTerm>>>,
}
impl<Term: Display, NonTerm: Display> Display for Backtrace<Term, NonTerm> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
for (idx, rules) in self.traces.iter().enumerate() {
if idx == 0 {
writeln!(f, "Trying to parse:")?;
} else {
writeln!(f, "Backtrace:")?;
}
for rule in rules {
writeln!(f, "\t>>> {}", rule)?;
}
}
Ok(())
}
}
impl<Term: Debug, NonTerm: Debug> Debug for Backtrace<Term, NonTerm> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
for (idx, rules) in self.traces.iter().enumerate() {
if idx == 0 {
writeln!(f, "Trying to parse:")?;
} else {
writeln!(f, "Backtrace:")?;
}
for rule in rules {
writeln!(f, "\t>>> {:?}", rule)?;
}
}
Ok(())
}
}