diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/request.gleam | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/src/request.gleam b/src/request.gleam index eae8bdd..96c950d 100644 --- a/src/request.gleam +++ b/src/request.gleam @@ -2,10 +2,17 @@ import database import gleam/int import gleam/json import gleam/list +import gleam/result import gleam/string_builder import svg import wisp +const default_theme = "asoul" + +const default_padding = 6 + +const max_padding = 32 + fn middleware(request, handle) { let request = wisp.method_override(request) @@ -16,6 +23,17 @@ fn middleware(request, handle) { handle(request) } +fn query_theme(query) -> String { + list.key_find(query, "theme") |> result.unwrap(default_theme) +} + +fn query_padding(query) -> Int { + list.key_find(query, "padding") + |> result.then(int.parse) + |> result.map(int.clamp(_, min: 0, max: max_padding)) + |> result.unwrap(default_padding) +} + pub fn handle(request, connection, image_cache, index_html) { use _ <- middleware(request) @@ -31,24 +49,12 @@ pub fn handle(request, connection, image_cache, index_html) { wisp.ok() |> wisp.set_header("Content-Type", "image/svg+xml") - |> wisp.string_body( - svg.xml( - image_cache, - case list.key_find(query, "theme") { - Ok(theme) -> theme - _ -> "asoul" - }, - counter.num, - case list.key_find(query, "padding") { - Ok(padding) -> - case int.parse(padding) { - Ok(n) -> int.clamp(n, min: 0, max: 32) - Error(_) -> 6 - } - _ -> 6 - }, - ), - ) + |> wisp.string_body(svg.xml( + image_cache, + query_theme(query), + counter.num, + query_padding(query), + )) } Error(_) -> wisp.unprocessable_entity() } |