#[macro_use]
extern crate pest_derive;
pub extern crate pest;
use pest::error::Error;
use pest::error::ErrorVariant;
use pest::iterators::Pairs;
#[derive(Debug, Parser)]
#[grammar = "obo14.pest"]
#[grammar = "bcp47.pest"]
#[grammar = "iso8601.pest"]
#[grammar = "rfc3987.pest"]
pub struct OboLexer;
impl OboLexer {
pub fn tokenize(rule: Rule, input: &str) -> Result<Pairs<Rule>, Error<Rule>> {
<Self as pest::Parser<Rule>>::parse(rule, input)
}
pub fn tokenize_all(rule: Rule, input: &str) -> Result<Pairs<Rule>, Error<Rule>> {
match Self::tokenize(rule, input) {
Ok(pairs) if pairs.as_str().len() == input.len() => Ok(pairs),
Err(err) => Err(err),
Ok(_) => {
let variant = ErrorVariant::ParsingError {
positives: vec![rule],
negatives: vec![],
};
let span = pest::Span::new(input, 0, input.len()).unwrap();
Err(Error::new_from_span(variant, span))
}
}
}
}