cornucopia 0.4.3

Generate type checked Rust from your SQL
Documentation
// Symbols
dot = _{"."}
underscore = _{"_"}
colon = _{":"}
comma = _{","}
start_param_list = _{"("}
end_param_list = _{")"}
start_ret_struct = _{"{"}
end_ret_struct = _{"}"}

// Postgres identifiers
lowercase_letter = _{'a'..'z'}
uppercase_letter = _{'A'..'Z'}
letter = _{ lowercase_letter | uppercase_letter }
digit = _{'0'..'9'}
postgres_alpha = _{ letter | digit | underscore }
ident = { (underscore | letter) ~ postgres_alpha* }

// Query parameters
parameter_list = {
	start_param_list
    ~ (ident ~ (comma ~ ident)*)?
    ~ (comma)?
    ~ end_param_list
}

// Query return
nullable_return_param = {ident ~ nullable_marker}
non_nullable_return_param = {ident}
return_param = _{nullable_return_param | non_nullable_return_param }
nullable_marker = _{"?"}
inferred_params = { return_param ~ (comma ~ return_param)* }
implicit_return = { "" }
struct_return = {
	start_ret_struct
	~ inferred_params?
    ~ comma?
    ~ end_ret_struct
}
return_type = _{(struct_return) | (implicit_return)}

// Query quantifier
zero_or_more = {"*"}
zero_or_one = {"?"}
one = {""}
quantifier = {zero_or_more | zero_or_one | one}

// Parser
parser = {
    SOI 
	~ ident 
    ~ parameter_list 
    ~ return_type
    ~ quantifier
    ~ EOI
}