Skip to main content

mago_type_syntax/parser/
mod.rs

1use crate::ast::Type;
2use crate::error::ParseError;
3use crate::lexer::TypeLexer;
4use crate::parser::internal::stream::TypeTokenStream;
5
6mod internal;
7
8/// Constructs a type AST from a lexer.
9///
10/// # Errors
11///
12/// Returns a [`ParseError`] if the type syntax is invalid.
13pub fn construct(lexer: TypeLexer<'_>) -> Result<Type<'_>, ParseError> {
14    let mut stream = TypeTokenStream::new(lexer);
15
16    let ty = internal::parse_type(&mut stream)?;
17
18    if let Some(next) = stream.lookahead(0)? {
19        return Err(ParseError::UnexpectedToken(vec![], next.kind, next.span));
20    }
21
22    Ok(ty)
23}