Add a function for making query parameters mutually exclusive

This allows building more complicated forms, where some of the query
parameters don't work together.
This commit is contained in:
Christopher Baines 2019-05-12 21:16:24 +01:00
parent 4a5f42ee52
commit b151d8bb78
1 changed files with 32 additions and 0 deletions

View File

@ -36,6 +36,7 @@
any-invalid-query-parameters?
parse-query-parameters
guard-against-mutually-exclusive-query-parameters
query-parameters->string
parse-datetime
@ -56,6 +57,37 @@
(value invalid-query-parameter-value)
(message invalid-query-parameter-message))
(define (guard-against-mutually-exclusive-query-parameters
parsed-query-parameters
mutually-exclusive-groups)
(map (match-lambda
((name . value)
(if (invalid-query-parameter? value)
(cons name value)
(or
(any (lambda (group)
(if (memq name group)
(let ((other-names
(filter (lambda (other-name)
(and (not (eq? name other-name))
(memq other-name group)))
(map car parsed-query-parameters))))
(if (not (null? other-names))
(cons
name
(make-invalid-query-parameter
value
(string-append
"cannot be specified along with "
(string-join (map symbol->string
other-names)
", "))))
#f))
#f))
mutually-exclusive-groups)
(cons name value)))))
parsed-query-parameters))
(define (parse-query-parameters request
accepted-query-parameters)
(define request-query-parameters