kamo-macros 0.1.4

A macro for parsing s-expressions into kamo Values.
Documentation
#![allow(clippy::pub_use)]

use pest_derive::Parser;

#[derive(Parser)]
#[grammar = "sexpr/sexpr.pest"]
pub struct SExpr;

#[allow(clippy::panic)]
#[cfg(test)]
mod tests {
    use super::*;
    use pest::Parser;

    include!("../../tests/atoms.in");

    #[test]
    fn parse_atoms() {
        for (i, &(value, rule)) in ATOMS.iter().enumerate() {
            let i = i + 1;
            let pairs = SExpr::parse(Rule::sexpr, value);
            let pairs = match pairs {
                Ok(pairs) => pairs,
                Err(e) => panic!("unsuccessful parse {i}: {e}"),
            };

            for pair in pairs {
                if pair.as_rule() == Rule::EOI {
                    continue;
                }
                assert_eq!(pair.as_rule(), rule, "atom value {i}");
            }
        }
    }

    include!("../../tests/compounds.in");

    #[test]
    fn parse_compounds() {
        for (i, &(input, rule)) in COMPOUNDS.iter().enumerate() {
            let i = i + 1;
            let pairs = SExpr::parse(Rule::sexpr, input);
            let pairs = match pairs {
                Ok(pairs) => pairs,
                Err(e) => panic!("unsuccessful parse {i}: {e}"),
            };

            for pair in pairs {
                if pair.as_rule() == Rule::EOI {
                    continue;
                }
                assert_eq!(pair.as_rule(), rule, "compound value {i}");
            }
        }
    }
}