Skip to content

Commit

Permalink
feat(parser): add simple map func code
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Dec 24, 2021
1 parent 84ce838 commit 21067e6
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
24 changes: 21 additions & 3 deletions quake_core/src/parser/quake.pest
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,35 @@ transflow_expr = {
}

midway = {
from ~ (rest_request | entry_list) ~ "." ~ to ~ l_bracket ~ parameter ~ r_bracket ~ filter_expr?
from ~ (rest_request | entry_list) ~ "." ~ to ~ l_bracket ~ parameter ~ r_bracket ~ filter_expr? ~ map_decl?
}

endway = {
from ~ (rest_request | entry_list) ~ "." ~ to ~ l_bracket ~ component_decl ~ r_bracket ~ filter_expr?
from ~ (rest_request | entry_list) ~ "." ~ to ~ l_bracket ~ component_decl ~ r_bracket ~ filter_expr? ~ map_decl?
}

filter_expr = {
"." ~ filter_str ~ l_bracket ~ string ~ r_bracket
}

filter_str = { "filter" | "FILTER" }

map_decl = {
"." ~ map_str ~ l_bracket ~ quoted ~ (map_expr ~ ("," ~ map_expr)*)? ~ quoted ~ r_bracket
}

map_expr = {
ident? ~ ("." ~ ident)* ~ "=>" ~ target ~ pipe_expr*
}

pipe_expr = {
"|" ~ pipe_func
}

pipe_func = { ident ~ parameters? }

target = { ident }
map_str = { "map" }

component_decl = {
"<" ~ component_name ~ ">"
}
Expand Down Expand Up @@ -105,6 +121,8 @@ string = @{
single_quoted_string
}

quoted = { "\"" | "\'" }

double_quoted_string = @{ "\"" ~ (!("\"") ~ ANY)* ~ "\""}
single_quoted_string = @{ "\'" ~ (!("\'") ~ ANY)* ~ "\'"}

Expand Down
19 changes: 19 additions & 0 deletions quake_core/src/parser/quake_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,25 @@ mod tests {
}
}

#[test]
fn should_parse_flow_map() {
let _unit = parse(
"transflow show_calendar {
from('todo','blog')
.to(<quake-calendar>)
.map('blog.created_date => date | date '); }",
)
.unwrap();

let _unit = parse(
"transflow show_calendar {
from('todo','blog')
.to(<quake-calendar>)
.map('blog.content => content | uppercase | substring(1, 150) '); }",
)
.unwrap();
}

#[test]
fn should_parse_simple_layout() {
let unit = parse(
Expand Down

0 comments on commit 21067e6

Please sign in to comment.