Skip to content

Instantly share code, notes, and snippets.

@devn
Created December 1, 2022 22:03
Show Gist options
  • Select an option

  • Save devn/b907b0597662246d7073ed7906b17461 to your computer and use it in GitHub Desktop.

Select an option

Save devn/b907b0597662246d7073ed7906b17461 to your computer and use it in GitHub Desktop.

Revisions

  1. devn created this gist Dec 1, 2022.
    50 changes: 50 additions & 0 deletions quick-pr-str.clj
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    (defn quick-pr-str
    ([data]
    (let [acc (StringBuilder.)]
    (quick-pr-str acc data)
    (.toString acc)))
    ([^StringBuilder acc data]
    (cond
    (string? data)
    (do
    (.append acc \")
    (.append acc ^String data)
    (.append acc \"))
    (map? data)
    (do
    (.append acc \{)
    (doseq [^MapEntry kv data]
    (quick-pr-str acc (.key kv))
    (.append acc \space)
    (quick-pr-str acc (.val kv))
    (.append acc \space))
    (.append acc \}))
    (vector? data)
    (do
    (.append acc \[)
    (doseq [v data]
    (quick-pr-str acc v)
    (.append acc \space))
    (.append acc \]))
    (set? data)
    (do
    (.append acc "#{")
    (doseq [v data]
    (quick-pr-str acc v)
    (.append acc \space))
    (.append acc \}))
    (seq? data)
    (do
    (.append acc \()
    (doseq [v data]
    (quick-pr-str acc v)
    (.append acc \space))
    (.append acc \)))
    (integer? data)
    (.append acc ^Integer data)
    (float? data)
    (.append acc ^Float data)
    (keyword? data)
    (.append acc ^String (str data))
    :else
    (.append acc data))))