#[macro_use] extern crate scan_rules;
use std::collections::BTreeSet;
use scan_rules::scanner::Word;
#[derive(Debug)]
enum Data {
Vector(i32, i32, i32),
Truthy(bool),
Words(Vec<String>),
Lucky(BTreeSet<i32>),
Other(String),
}
fn main() {
print!("Enter some data: ");
let data = readln! {
("<", let x, ",", let y, ",", let z, ">") => Data::Vector(x, y, z),
(let b) => Data::Truthy(b),
("yes") => Data::Truthy(true),
("no") => Data::Truthy(false),
("words:", [ let words: Word<String> ],+) => Data::Words(words),
("lucky numbers:", [ let ns: i32 ]*: BTreeSet<_>) => Data::Lucky(ns),
("lucky numbers:", let ns) => Data::Lucky(ns),
(..other) => Data::Other(String::from(other))
};
println!("data: {:?}", data);
}