use crate::parse::string_table::SymbolId;
use crate::types::RuleId;
pub trait GrammarNames {
fn rule_name(&self, id: RuleId) -> Option<&str>;
fn expected_label(&self, id: u32) -> Option<&str>;
fn class_label(&self, label_id: u32) -> Option<&str>;
fn resolve_symbol(&self, _id: SymbolId) -> Option<&str> {
None
}
}
#[derive(Clone, Copy, Debug)]
pub struct SliceGrammarNames<'a> {
pub rule_names: &'a [&'a str],
pub expected_labels: &'a [&'a str],
pub class_labels: &'a [&'a str],
}
impl GrammarNames for SliceGrammarNames<'_> {
fn rule_name(&self, id: RuleId) -> Option<&str> {
self.rule_names.get(id as usize).copied()
}
fn expected_label(&self, id: u32) -> Option<&str> {
self.expected_labels.get(id as usize).copied()
}
fn class_label(&self, label_id: u32) -> Option<&str> {
self.class_labels.get(label_id as usize).copied()
}
fn resolve_symbol(&self, _id: SymbolId) -> Option<&str> {
None
}
}