atelier/bake/lib/syn/ast.rs
2025-01-16 20:05:09 -05:00

24 lines
397 B
Rust

use super::{
cst::{self, NodeKind},
tok::{self, TokenKind},
};
pub struct Atom<'a>(&'a cst::Node);
impl cst::Node {
pub fn as_atom(&self) -> Option<Atom> {
if *self.kind() != NodeKind::Atom {
return None;
}
Some(Atom(self))
}
}
impl Atom<'_> {
pub fn value(&self) -> &tok::Atom {
match &self.0.token().unwrap().kind {
TokenKind::Atom(a) => a,
_ => unreachable!(),
}
}
}