/src/util/query-string.lisp

http://github.com/skypher/cl-oauth · Lisp · 27 lines · 22 code · 4 blank · 1 comment · 1 complexity · e5cad0d8360ad7052ff7ae9b2bfdeb69 MD5 · raw file

  1. (in-package :oauth)
  2. (defun alist->query-string (alist &key (include-leading-ampersand t) url-encode)
  3. (let* ((plist (splice-alist alist))
  4. (plist* (if url-encode
  5. (loop for (key value) on plist by #'cddr
  6. collect (url-encode (string key))
  7. collect (url-encode value))
  8. plist))
  9. (result (format nil "~{&~A=~A~}" plist*)))
  10. (subseq ; TODO: nsubseq http://darcs.informatimago.com/lisp/common-lisp/utility.lisp
  11. result
  12. (if (or (zerop (length result)) include-leading-ampersand)
  13. 0
  14. 1))))
  15. (defun query-string->alist (query-string)
  16. ;; TODO: doesn't handle leading ?
  17. (check-type query-string string)
  18. (let* ((kv-pairs (remove "" (split-sequence #\& query-string) :test #'equal))
  19. (alist (mapcar (lambda (kv-pair)
  20. (let ((kv (split-sequence #\= kv-pair)))
  21. (cons (first kv) (second kv))))
  22. kv-pairs)))
  23. alist))