piston_meta 0.4.0

A research project of meta parsing and composing for data
Documentation
extern crate piston_meta;
extern crate range;

use std::rc::Rc;
use piston_meta::*;

fn main() {
    let text = "foo \"Hello world!\"";
    let foo: Rc<String> = Rc::new("foo".into());
    let rules = Rule::Sequence(Sequence {
        debug_id: 0,
        args: vec![
            Rule::Token(Token {
                debug_id: 1,
                text: foo.clone(),
                inverted: false,
                property: None,
            }),
            Rule::Whitespace(Whitespace {
                debug_id: 2,
                optional: false,
            }),
            Rule::Text(Text {
                debug_id: 0,
                allow_empty: true,
                property: Some(foo.clone())
            })
        ]
    });
    let data = parse(&rules, &[], text).unwrap();
    assert_eq!(data.len(), 1);
    if let &MetaData::String(_, ref hello) = &data[0].1 {
        println!("{}", hello);
    }
}