Add #:required and #:multi-value support to parse-query-parameters

This commit is contained in:
Christopher Baines 2019-05-11 20:34:53 +01:00
parent bec838caf9
commit 3d004f8597

View file

@ -59,7 +59,8 @@
accepted-query-parameters) accepted-query-parameters)
(define request-query-parameters (define request-query-parameters
(let ((query (uri-query (request-uri request)))) (let ((query (uri-query (request-uri request))))
(if query (if (and query
(not (string-null? query)))
(map (match-lambda (map (match-lambda
((name . value) ((name . value)
(cons (string->symbol name) (cons (string->symbol name)
@ -75,6 +76,32 @@
((_ . "") #f) ((_ . "") #f)
((_ . value) (cons name ((_ . value) (cons name
(processor value))))) (processor value)))))
((name processor #:required)
(match (assq name request-query-parameters)
(#f (cons name
(make-invalid-query-parameter
#f "this value is required.")))
((_ . "") (cons name
(make-invalid-query-parameter
#f "this value is required.")))
((_ . value) (cons name
(processor value)))))
((name processor #:multi-value)
(match (filter-map
(match-lambda
((k . value)
(and
(eq? k name)
(match value
(#f #f)
("" #f)
(value (processor value))))))
request-query-parameters)
(() #f)
(x (cons name x))))
((name processor #:default default) ((name processor #:default default)
(match (assq name request-query-parameters) (match (assq name request-query-parameters)
(#f (cons name default)) (#f (cons name default))