(require '[clojure.edn :as edn] '[clojure.walk :as walk])
(defrecord Size [width height])
(defrecord Rect [size])
(def rect (->Rect (->Size 5 10)))
; EDN knows no records, so every one of them
; is turned into a plain map first
; Encoding Binary Data
(def rect-b
(.getBytes
(pr-str (walk/postwalk
#(if (record? %) (into {} %) %) rect))
"UTF-8"))
; Decoding Binary Data
(def rect2 (-> (String. rect-b "UTF-8")
edn/read-string
(update :size map->Size)
map->Rect))
(println "rect2 size width is" (:width (:size rect2)))