mipl 0.2.1

Minimal Imperative Parsing Library
Documentation
use mipl::prelude::*;

pub fn alphanum_vec() -> Vec<char> {
    let mut vec: Vec<char> = vec![];

    for i in 65..91 {
        vec.push(char::from_u32(i).unwrap());
    }
    for i in 97..123 {
        vec.push(char::from_u32(i).unwrap());
    }
    for i in 48..58 {
        vec.push(char::from_u32(i).unwrap());
    }

    vec
}

pub fn tokenize(src: String) -> Parser {
    let alphanum_vec: Vec<char> = alphanum_vec();

    let del_param = DelimitersParam{
        discard: DiscardDelimiters::new(
            vec![
                ' ',
                '\n',
                '\t'
            ]
        ),
        keep: KeepDelimiters::new(
            alphanum_vec
        )
    };

    Parser::from(src, del_param)
}

fn parse(parser: &mut Parser) -> bool {
    let alph_vec: Vec<String> = alphanum_vec()
        .into_iter()
        .map(|ch| char::to_string(&ch))
        .collect();
    let _collector = CollectWhile::<OrExactMatch>::subparse(alph_vec, parser);

    if let Some(tok) = parser.next() {
        match tok {
            Token::End(EndToken) => true,
            _ => false
        }
    } else {
        true
    }
}

fn main() {
    use std::io::Write;
    loop {
        print!("check if alphanumeric: ");
        std::io::stdout().flush().unwrap();
        let input = {
            let mut buf = String::new();
            std::io::stdin().read_line(&mut buf).unwrap();
            buf
        };
        if input.trim() == "exit" {
            break;
        }
        let mut parser = tokenize(input);
        println!("{}", parse(&mut parser))
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_true_alphanum1() {
        let input = String::from("helix123");
        let mut parser = tokenize(input);
        assert_eq!(
            parse(&mut parser),
            true
        )
    }

    #[test]
    fn test_false_alphanum1() {
        let input = String::from("13wonder*");
        let mut parser = tokenize(input);
        assert_eq!(
            parse(&mut parser),
            false
        )
    }
}