Commit02f3dbd7Recorded25 Mar 2026Repositorysigil-wise
Remove local url-encode-value and build-query-string, import from (sigil http)
Message
The shared implementation in sigil-http handles multi-byte UTF-8 correctly via string->utf8, unlike the local copy which used char->integer.
Changed
src/wise.sgl | 39 +--------------------------------------
1 file changed, 1 insertion(+), 38 deletions(-)Diff
src/wise.sglmodified
@@ -9,6 +9,7 @@
9
(sigil string) 10
(sigil struct) 11
(sigil json)+12
(only (sigil http) url-encode-value build-query-string) 13
(sigil http client)) 14
15
(export ;; Client@@ -100,44 +101,6 @@
101
(apply string-append (wise-client-base-url client) 102
(map (lambda (p) (string-append "/" p)) parts))) 103
−103
;;; URL-encode a query parameter value.−104
(define (url-encode-value s)−105
(let ((len (string-length s)))−106
(let loop ((i 0) (acc '()))−107
(if (>= i len)−108
(list->string (reverse acc))−109
(let ((c (string-ref s i)))−110
(cond−111
((or (char-alphabetic? c)−112
(char-numeric? c)−113
(char=? c #\-)−114
(char=? c #\_)−115
(char=? c #\.)−116
(char=? c #\~))−117
(loop (+ i 1) (cons c acc)))−118
((char=? c #\space)−119
(loop (+ i 1) (cons #\+ acc)))−120
(else−121
(let ((n (char->integer c)))−122
(loop (+ i 1)−123
(append (reverse (string->list−124
(string-append "%"−125
(if (< n 16) "0" "")−126
(number->string n 16))))−127
acc))))))))))−128
−129
;;; Build a query string from a list of (key . value) pairs.−130
;;; Pairs with #f values are omitted.−131
(define (build-query-string params)−132
(let ((parts (filter (lambda (p) (cdr p)) params)))−133
(if (null? parts)−134
""−135
(string-append "?"−136
(string-join−137
(map (lambda (p)−138
(string-append (car p) "=" (url-encode-value (cdr p))))−139
parts)−140
"&"))))) 104
105
;;; Perform an authenticated GET request and return parsed JSON. 106
;;; Raises an error on HTTP status >= 400, with Wise-specific context.