aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/request.gleam42
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()
}