sigma 0.1.1

Sigma σ is a Simple, Safe and Fast Template language
Documentation
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 }