summaryrefslogtreecommitdiff
path: root/compojure-3.2/src/compojure/encodings.clj
blob: 6587d4811303268594cb391a510ec97aa980567b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
;; Copyright (c) James Reeves. All rights reserved.
;; The use and distribution terms for this software are covered by the Eclipse
;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which
;; can be found in the file epl-v10.html at the root of this distribution. By
;; using this software in any fashion, you are agreeing to be bound by the
;; terms of this license. You must not remove this notice, or any other, from
;; this software.

(ns compojure.encodings
  "Functions for encoding data."
  (:use compojure.str-utils
        clojure.contrib.duck-streams)
  (:import [java.net URLEncoder URLDecoder]
           [org.apache.commons.codec.binary Base64 Hex]))

(defn urlencode
  "Encode a urlencoded string using the default encoding."
  [s]
  (URLEncoder/encode (str* s) *default-encoding*))

(defn urldecode
  "Decode a urlencoded string using the default encoding."
  [s]
  (URLDecoder/decode s *default-encoding*))

(defn base64-encode-bytes
  "Encode an array of bytes into a base64 encoded string."
  [unencoded]
  (String. (Base64/encodeBase64 unencoded)))
 
(defn base64-encode
  [unencoded]
  "Encode a string using base64."
  (base64-encode-bytes (.getBytes unencoded)))
 
(defn base64-decode-bytes
  "Decode a string using base64 into an array of bytes."
  [encoded]
  (Base64/decodeBase64 (.getBytes encoded)))

(defn base64-decode
  "Decode a string using base64."
  [encoded]
  (String. (base64-decode-bytes encoded)))
  
(defn marshal
  "Serialize a Clojure object in a base64-encoded string."
  [data]
  (base64-encode (pr-str data)))
 
(defn unmarshal
  "Unserialize a Clojure object from a base64-encoded string."
  [marshaled]
  (read-string (base64-decode marshaled)))

(defn decode-hex
  "Converts a string of hex into it's corresponding byte array."
  [s]
  (Hex/decodeHex (.toCharArray s)))

(defn encode-hex
  "Converts a byte array into it's corresponding hex String."
  [array]
  (String. (Hex/encodeHex array)))