(def write-handlers {CustomUri (reify WriteHandler
(tag [_ v] "r")
(rep [_ v] (.s v))
(stringRep [_ v] nil)
(getVerboseHandler [_] nil))})
(def read-handlers {"r" (reify ReadHandler
(fromRep [_ v] (CustomUri. v)))})
(def out (ByteArrayOutputStream. 4096))
(def writer (transit/writer out :json {:handlers write-handlers}))
(transit/write writer (URI. "http://google.com"))
(.toString out) ;; => "[\"~#'\",\"~rhttp://google.com\"]"
(def in (ByteArrayInputStream. (.toByteArray out)))
(def reader (transit/reader in :json {:handlers read-handlers}))
(prn (transit/read reader)) ;; => #object[user.CustomUri 0xe68a2af "user.CustomUri@e68a2af"]