pub mod meta;
mod structure;
mod token;
pub mod value;
pub use token::*;
use crate::{Error, Pattern, Result};
impl Pattern {
pub fn parse(input: &str) -> Result<Self> {
let (pattern, consumed) = Self::parse_partial(input)?;
if consumed < input.len() {
return Err(Error::ExtraData(consumed..input.len()));
}
Ok(pattern)
}
pub fn parse_partial(input: &str) -> Result<(Self, usize)> {
use logos::Logos;
use crate::parse::{Token, meta::parse_or};
let mut lexer = Token::lexer(input);
let pattern = parse_or(&mut lexer)?;
let consumed = match lexer.next() {
Some(_) => lexer.span().start,
None => input.len(),
};
Ok((pattern, consumed))
}
}