wgsl-parser 0.5.0

A zero-copy recursive-descent parser for WebGPU shading language
Documentation
use core::fmt;

use gramatika::{DebugLisp, Span, Substr, Token, TokenStream};

#[derive(Token, DebugLispToken)]
pub enum Directive {
	#[pattern = "#ifdef"]
	IfDef(Substr, Span),

	#[pattern = "#ifndef"]
	IfNDef(Substr, Span),

	#[pattern = "#if"]
	If(Substr, Span),

	#[pattern = "#else ifdef"]
	ElseIfDef(Substr, Span),

	#[pattern = "#else ifndef"]
	ElseIfNDef(Substr, Span),

	#[pattern = "#else if"]
	ElseIf(Substr, Span),

	#[pattern = "#else"]
	Else(Substr, Span),

	#[pattern = "#endif"]
	Endif(Substr, Span),
}

impl fmt::Debug for Directive {
	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
		DebugLisp::fmt(self, f, 0)
	}
}

impl fmt::Display for Directive {
	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
		write!(f, "{}", self.lexeme())
	}
}

pub type DirectiveLexer = TokenStream<Directive>;