use super::{super::Token, or_parser::parse_or};
use crate::{Error, Pattern, Result};
pub(crate) fn parse_capture(
lexer: &mut logos::Lexer<Token>,
name: String,
) -> Result<Pattern> {
match lexer.next() {
Some(Ok(Token::ParenOpen)) => {
let pat = parse_or(lexer)?;
match lexer.next() {
Some(Ok(Token::ParenClose)) => Ok(Pattern::capture(name, pat)),
Some(Ok(t)) => {
Err(Error::UnexpectedToken(Box::new(t), lexer.span()))
}
Some(Err(e)) => Err(e),
None => Err(Error::ExpectedCloseParen(lexer.span())),
}
}
Some(Ok(t)) => Err(Error::UnexpectedToken(Box::new(t), lexer.span())),
Some(Err(e)) => Err(e),
None => Err(Error::UnexpectedEndOfInput),
}
}