pub mod cache;
pub mod class;
pub mod either;
pub mod eof;
pub mod grammar;
pub mod literal;
pub mod optional;
pub mod parser;
pub mod recursive;
pub mod repeat;
pub mod result;
pub mod sequence;
pub mod until;
pub mod utf8class;
pub mod utf8util;
pub use parser::{Parser, Source, parse};
pub use result::{Error, ParseResult};
pub use class::Class;
pub use literal::Literal;
pub use utf8class::Utf8Class;
pub use eof::EndOfFile;
pub use optional::Optional;
pub use recursive::Recursive;
pub use repeat::Repeat;
pub use grammar::GrammarParser;
pub mod prelude {
pub use crate::{
Class,
EndOfFile,
Error,
GrammarParser,
Literal,
Optional,
ParseResult,
Parser,
Recursive,
Repeat,
Source,
Utf8Class,
cache::ParsingCache,
parse,
};
}
#[cfg(test)]
mod tests {
use super::*;
use std::io::Cursor;
#[test]
fn test_root_level_exports_basic() {
let literal = Literal::from_str("test");
let cursor = Cursor::new(b"test");
let mut source = Source::new(cursor);
let result = parse(literal, &mut source);
assert!(result.is_ok());
}
#[test]
fn test_root_level_exports_with_macros() {
let parser = seq![
Literal::from_str("Hello"),
Optional::new(Utf8Class::whitespace()),
Literal::from_str("World")
];
let cursor = Cursor::new(b"Hello World");
let mut source = Source::new(cursor);
let result = parse(parser, &mut source);
assert!(result.is_ok());
}
#[test]
fn test_root_level_exports_oneof() {
let parser = oneof![Literal::from_str("hello"), Literal::from_str("world")];
let cursor = Cursor::new(b"hello");
let mut source = Source::new(cursor);
let result = parse(parser, &mut source);
assert!(result.is_ok());
}
#[test]
fn test_prelude_import() {
use crate::prelude::*;
let parser = seq![Literal::from_str("test"), Optional::new(Utf8Class::alpha())];
let cursor = Cursor::new(b"testx");
let mut source = Source::new(cursor);
let result = parse(parser, &mut source);
assert!(result.is_ok());
}
#[test]
fn test_grammar_parser_exported() {
let _parser = GrammarParser::new();
}
}