bc_envelope_pattern/parse/
parse_pattern.rs1use logos::Logos;
2
3use super::{Token, meta};
4use crate::{Error, Pattern, Result};
5
6impl Pattern {
7 pub fn parse(input: impl AsRef<str>) -> Result<Pattern> {
9 let mut lexer = Token::lexer(input.as_ref());
10
11 let pattern = meta::parse_or(&mut lexer)?;
12
13 match lexer.next() {
14 None => Ok(pattern),
15 Some(Ok(_)) => Err(Error::ExtraData(lexer.span())),
16 Some(Err(e)) => {
17 match e {
20 Error::Unknown => {
21 Err(Error::UnrecognizedToken(lexer.span()))
22 }
23 _ => Err(e),
24 }
25 }
26 }
27 }
28}