wgsl_parser/decl/
alias.rs1use 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}