camxes-rs 0.1.2

A Parsing Expression Grammar (PEG) parser generator with zero-copy parsing and rich debugging capabilities
Documentation
use std::collections::HashSet;
use std::sync::Arc;

#[derive(Clone, Debug)]
pub enum Rule {
    Empty,
    Any,
    Literal(String),
    NonTerminal(String),
    Range(String, String),
    Class(HashSet<String>),
    Group(Arc<Rule>),
    ZeroOrMore(Arc<Rule>),
    OneOrMore(Arc<Rule>),
    Optional(Arc<Rule>),
    And(Arc<Rule>),
    Not(Arc<Rule>),
    Choice(Vec<Rule>),
    Sequence(Vec<Rule>),
}

impl Rule {
    pub fn boxed(self) -> Arc<Rule> {
        Arc::new(self)
    }

    pub fn create_character_class(chars: &[&str]) -> Rule {
        Rule::Class(chars.iter().map(|&c| c.to_string()).collect())
    }
}