wgsl_parser/decl/
alias.rs

1use gramatika::{Parse, ParseStreamer, Span, Spanned};
2
3use crate::{
4	common::TypeDecl,
5	token::{keyword, operator, punct, Token, TokenKind},
6	ParseStream,
7};
8
9#[derive(Clone, DebugLisp)]
10pub struct TypeAliasDecl {
11	pub storage: Token,
12	pub name: Token,
13	pub eq: Token,
14	pub value: TypeDecl,
15	pub semicolon: Token,
16}
17
18impl Parse for TypeAliasDecl {
19	type Stream = ParseStream;
20
21	fn parse(input: &mut Self::Stream) -> gramatika::Result<Self> {
22		let storage = input.consume(keyword![alias])?;
23		let name = input.consume_kind(TokenKind::Ident)?;
24		let eq = input.consume(operator![=])?;
25		let value = input.parse()?;
26		let semicolon = input.consume(punct![;])?;
27
28		Ok(Self {
29			storage,
30			name,
31			eq,
32			value,
33			semicolon,
34		})
35	}
36}
37
38impl Spanned for TypeAliasDecl {
39	fn span(&self) -> Span {
40		self.storage.span().through(self.semicolon.span())
41	}
42}