mpl-macro 0.2.0

Derive parsers from MPL's one-rule grammar files. Includes the FastParse static-codegen backend (cascade detection, first-byte dispatch, Squirrel left recursion).
Documentation
use crate::mplg::MplgOutput;
use proc_macro2::TokenStream;
use quote::{format_ident, quote};
use syn::Ident;

pub fn generate_variable(ident: &Ident, lines: &[MplgOutput]) -> TokenStream {
    let variables = lines
        .iter()
        .filter(|line| matches!(line, MplgOutput::Rule(_)))
        .map(|line| match line {
            MplgOutput::Rule(rule) => {
                let variable = format_ident!("{}", rule.value);
                quote!(#variable)
            }
            _ => unreachable!(),
        });

    quote! {
        impl ::mpl::symbols::Variable for #ident {}

        #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
        pub enum #ident {
            #(#variables),*
        }
    }
}