unlisted_data_type = @{ (ASCII_ALPHA_LOWER+ ~ ASCII_DIGIT*) } // this was added to catch unknown types data_type = { "u8" | "i8" | "u16" | "i16" | "u32" | "i32" | "u64" | "i64" | "f32" | "f64" | "bool" | "str" | unlisted_data_type // traaap ! } var_name = { ((ASCII_ALPHA ~ ("_" | "$")*) ~ ASCII_DIGIT*)+ } nullable = { "?" } data_type_sep = { ":" } var = { var_name ~ nullable? ~ WHITE_SPACE* ~ data_type_sep? ~ WHITE_SPACE* ~ data_type? } function_name = { ((ASCII_ALPHA_UPPER ~ "_"*) ~ ASCII_DIGIT*)+ } pipe_op = { "|>" | "|" } function = { pipe_op ~ (NEWLINE | WHITE_SPACE)* ~ function_name } pair_open = { "{{" } pair_close = { "}}" } var_pair = { pair_open ~ (NEWLINE | WHITE_SPACE)* ~ var ~ (NEWLINE | WHITE_SPACE)* ~ (function | (NEWLINE | WHITE_SPACE))* ~ (NEWLINE | WHITE_SPACE)* ~ pair_close } sigma = _{ SOI ~ NEWLINE* ~ (var_pair | ANY)* ~ NEWLINE* ~ EOI }