Just barely starting to diff the two parsed forms.

This commit is contained in:
Tom Alexander
2023-04-11 17:35:09 -04:00
parent 5305ae7627
commit 287cc8dea3
5 changed files with 54 additions and 2 deletions

View File

@@ -30,6 +30,22 @@ pub struct TextWithProperties<'s> {
properties: Vec<Token<'s>>,
}
impl<'s> Token<'s> {
pub fn as_list<'p>(&'p self) -> Result<&'p Vec<Token<'s>>, Box<dyn std::error::Error>> {
Ok(match self {
Token::List(children) => Ok(children),
_ => Err("wrong token type"),
}?)
}
pub fn as_atom<'p>(&'p self) -> Result<&'s str, Box<dyn std::error::Error>> {
Ok(match self {
Token::Atom(body) => Ok(*body),
_ => Err("wrong token type"),
}?)
}
}
#[tracing::instrument(ret, level = "debug")]
pub fn sexp<'s>(input: &'s str) -> Res<&'s str, Token<'s>> {
let (remaining, _) = multispace0(input)?;