Hi,
I'm seeking advice for passing simple key-value pairs to a function and
generate a string out of these values. Neither the names not the number
of keys is known in advance.
Background: This shall become a generic function for generating URI
query-strings.
My current approach please see below. Anyhow, I'm wondering whether the
quite and quasiquote can be replaced by something simpler.
(use-modules (ice-9 match))
(define limit 100)
(define evaluation "linux")
(define* (api-uri base path #:rest query)
(define (build-query-string kv)
(match kv
((name #f) #f)
((name (? string? value))
(string-append name "=" value)) ; FIXME: encode
((name (? number? value))
(string-append name "=" (number->string value)))))
(format #t "~%Query: ~a~%~%" query)
(let ((query-string
(when query
(string-join
(filter (lambda (x) x) (map build-query-string query))
"&"))))
(format #t "~%Query-String: ~a~%~%" query-string)
;; todo: build uri incl. query-string
))
(api-uri "https://ci.guix.gnu.org" "/api/jobs")
(api-uri "https://ci.guix.gnu.org" "/api/jobs"
`("nr" ,limit)
`("evaluation" ,evaluation)
`("system" ,#f))
--
Regards
Hartmut Goebel
| Hartmut Goebel | h.goe...@crazy-compilers.com |
| www.crazy-compilers.com | compilers which you thought are impossible |