RESP
is a wrapper around the Redis Serialization
Protocol. You can create all types,
stringify the built types into strings using str, and decode from
the string protocol using from-string. Arrays are fully
supported, including nested arrays.
; decoding
(RESP.from-string "+OK\r\n") ; => (Success (Str @"OK"))
(RESP.from-string ":42\r\n") ; => (Success (Integer 42))
(RESP.from-string "$-1\r\n") ; => (Success (Null))
; encoding
(str &(RESP.Str @"hi")) ; => "$2\r\nhi\r\n"
(str &(RESP.Integer 42)) ; => ":42\r\n"
; pattern matching on responses
(match (Redis.get &r @"key")
(Result.Success resp)
(match resp
(RESP.Str s) (println* "got: " &s)
(RESP.Null) (println* "not found")
(RESP.Arr items) (println* "array of " &(Int.str (Array.length &items)))
_ (println* "other"))
(Result.Error e) (println* "error: " &e))
If you want your types to be supported when encoding, you’ll have to implement
the interface to-redis, the signature of which is (Fn [a] RESP)).
from-string
defn
(Fn [(Ref String a)] (Result RESP String))
(from-string s)
converts a RESP string into a RESP data structure.