(ns document-storage.postgres.encoding
  (:require [cognitect.transit :as transit]
            [taoensso.nippy :as nippy-compression :as nippy]
            [taoensso.nippy.compression :as nippy-compression])
  (:import [java.io ByteArrayInputStream ByteArrayOutputStream]))

(defn document->transit [document]
  (let [out (ByteArrayOutputStream.)
        writer (transit/writer out :json)]
    (transit/write writer document)
    (.toString out)))

(defn transit->document [datastring]
  (let [in (ByteArrayInputStream. (.getBytes datastring))
        reader (transit/reader in :json)]
    (transit/read reader)))


(defn encode-document [data]
  (nippy/freeze data {:compression nippy-compression/lz4-compressor}))

(defn decode-document [data]
  (nippy/thaw data))