xshade-parser 0.1.2

Parser and untyped AST for the xshade language.
Documentation
use nom::types::CompleteStr;
use nom_locate::LocatedSpan;

type NomSpan<'a> = LocatedSpan<CompleteStr<'a>>;

named!(pub ws0<NomSpan, NomSpan>, recognize!(many0!(one_of!(" \r\n\t"))));
named!(pub ws1<NomSpan, NomSpan>, recognize!(many1!(one_of!(" \r\n\t"))));

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

    #[test]
    fn it_parses_zero_ws() {
        let input = NomSpan::new(CompleteStr("a"));
        let output = ws0(input).unwrap();
        assert_eq!(output.1.fragment, CompleteStr(""));
    }

    #[test]
    fn it_parses_at_least_one_ws() {
        let input = NomSpan::new(CompleteStr("  \r\n  a"));
        let output = ws0(input).unwrap();
        assert_eq!(output.1.fragment, CompleteStr("  \r\n  "));
    }

    #[test]
    fn it_fails_on_zero_ws() {
        let input = NomSpan::new(CompleteStr("a"));
        let output = ws1(input).is_err();
        assert!(output);
    }

    #[test]
    fn it_parses_one_or_more_ws() {
        let input = NomSpan::new(CompleteStr("  \r\n  a"));
        let output = ws0(input).unwrap();
        assert_eq!(output.1.fragment, CompleteStr("  \r\n  "));
    }
}