gen_analyzer/parse/value/
special.rs1use std::str::FromStr;
2
3use nom::{bytes::complete::tag, sequence::preceded, IResult};
4
5use gen_utils::{
6 error::{ConvertError, Error},
7 parser::parse_closure_body,
8};
9
10pub enum Special {
11 MakepadShader,
12}
13
14impl Special {
15 pub fn makepad_shader_parser(input: &str) -> IResult<&str, (&str, (&str, &str, Option<bool>))> {
17 let (remain, body) = preceded(tag("shader"), parse_closure_body)(input)?;
18
19 Ok((remain, ("()", ("shader", body.trim(), Some(true)))))
20 }
21}
22
23impl FromStr for Special {
24 type Err = Error;
25
26 fn from_str(s: &str) -> Result<Self, Self::Err> {
27 match s {
28 "shader" => Ok(Special::MakepadShader),
29 _ => Err(ConvertError::FromTo {
30 from: s.to_string(),
31 to: "Fn Special".to_string(),
32 }
33 .into()),
34 }
35 }
36}