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:
parent
4a5f42ee52
commit
b151d8bb78
1 changed files with 32 additions and 0 deletions
|
|
@ -36,6 +36,7 @@
|
||||||
any-invalid-query-parameters?
|
any-invalid-query-parameters?
|
||||||
|
|
||||||
parse-query-parameters
|
parse-query-parameters
|
||||||
|
guard-against-mutually-exclusive-query-parameters
|
||||||
query-parameters->string
|
query-parameters->string
|
||||||
|
|
||||||
parse-datetime
|
parse-datetime
|
||||||
|
|
@ -56,6 +57,37 @@
|
||||||
(value invalid-query-parameter-value)
|
(value invalid-query-parameter-value)
|
||||||
(message invalid-query-parameter-message))
|
(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
|
(define (parse-query-parameters request
|
||||||
accepted-query-parameters)
|
accepted-query-parameters)
|
||||||
(define request-query-parameters
|
(define request-query-parameters
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue