devalang_wasm/language/syntax/parser/driver/
trigger.rs1use crate::language::syntax::ast::{DurationValue, Statement, StatementKind, Value};
2use anyhow::{Result, anyhow};
3
4pub fn parse_trigger_line(line: &str, line_number: usize) -> Result<Statement> {
5 let mut parts = line.trim_start_matches('.').trim().split_whitespace();
6 let entity = parts
7 .next()
8 .ok_or_else(|| anyhow!("trigger requires a target"))?
9 .to_string();
10
11 let mut duration = DurationValue::Auto;
12 if let Some(token) = parts.next() {
13 if token.eq_ignore_ascii_case("for") {
14 if let Some(value) = parts.next() {
15 duration =
16 crate::language::syntax::parser::driver::duration::parse_duration_token(value)?;
17 }
18 } else {
19 duration =
20 crate::language::syntax::parser::driver::duration::parse_duration_token(token)?;
21 }
22 }
23
24 Ok(Statement::new(
25 StatementKind::Trigger {
26 entity,
27 duration,
28 effects: None,
29 },
30 Value::Null,
31 0,
32 line_number,
33 1,
34 ))
35}