roc/crates/cli/tests/test-projects/module_params/Api.roc

69 lines
1.7 KiB
Text

module { app_id, protocol } -> [
base_url,
get_user,
get_post,
get_posts,
get_post_comments,
get_companies,
base_url_aliased,
get_post_aliased,
get_user_safe,
get_post_comment,
]
## value def referencing params
base_url : Str
base_url =
protocol("api.example.com/$(app_id)")
## function def referencing params
get_user : U32 -> Str
get_user = \user_id ->
# purposefully not using baseUrl to test top-level fn referencing param
protocol("api.example.com/$(app_id)/users/$(Num.to_str(user_id))")
## function def referencing top-level value
get_post : U32 -> Str
get_post = \post_id ->
"$(base_url)/posts/$(Num.to_str(post_id))"
## function def passing top-level function
get_posts : List U32 -> List Str
get_posts = \ids ->
List.map(ids, get_post)
## function def calling top-level function
get_post_comments : U32 -> Str
get_post_comments = \post_id ->
"$(get_post(post_id))/comments"
## function def passing nested function
get_companies : List U32 -> List Str
get_companies = \ids ->
get_company = \id ->
protocol("api.example.com/$(app_id)/companies/$(Num.to_str(id))")
List.map(ids, get_company)
## aliasing top-level value
base_url_aliased : Str
base_url_aliased =
base_url
## aliasing top-level fn
get_post_aliased : U32 -> Str
get_post_aliased =
get_post
## top-level value returning functions
get_user_safe : U32 -> Str
get_user_safe =
if Str.starts_with(app_id, "prod_") then
\id -> "$(get_user(id))?safe=true"
else
get_user
## two-argument function
get_post_comment : U32, U32 -> Str
get_post_comment = \post_id, comment_id ->
"$(get_post(post_id))/comments/$(Num.to_str(comment_id))"