summaryrefslogtreecommitdiff
path: root/tissue/utils.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tissue/utils.scm')
-rw-r--r--tissue/utils.scm28
1 files changed, 27 insertions, 1 deletions
diff --git a/tissue/utils.scm b/tissue/utils.scm
index 59c0b0a..14cc243 100644
--- a/tissue/utils.scm
+++ b/tissue/utils.scm
@@ -21,7 +21,9 @@
#:use-module (srfi srfi-19)
#:use-module (srfi srfi-26)
#:use-module (ice-9 filesystem)
+ #:use-module (ice-9 match)
#:use-module (ice-9 popen)
+ #:use-module (web uri)
#:export (string-blank?
string-contains?
string-remove-prefix
@@ -31,7 +33,9 @@
call-with-temporary-directory
call-with-output-pipe
get-line-dos-or-unix
- memoize-thunk))
+ memoize-thunk
+ query-parameters
+ query-string))
(define (string-blank? str)
"Return #t if STR contains only whitespace. Else, return #f."
@@ -120,3 +124,25 @@ ports) in that it also supports DOS line endings."
(unless result
(set! result (thunk)))
result)))
+
+(define (query-parameters query)
+ "Return an association list of query parameters in web QUERY string."
+ (if query
+ (map (lambda (parameter)
+ (match (string-split parameter #\=)
+ ((key value)
+ (cons (uri-decode key)
+ (uri-decode value)))))
+ (string-split query #\&))
+ '()))
+
+(define (query-string parameters)
+ "Return a query string for association list of PARAMETERS."
+ (string-join
+ (map (match-lambda
+ ((key . value)
+ (string-append (uri-encode key)
+ "="
+ (uri-encode value))))
+ parameters)
+ "&"))