I'm trying to use a standard serialization for Clojure code, one that will ignore white spaces, comments etc. I was thinking of using EDN for that.
According to the what I read, the standard way to serialize s-expressions to EDN is through pr-str
, which seems to work nicely with most of Clojure's constructs. However, this seems not to work that well for code containing regular expressions (using the hash-string reader macro, like #"\d+"
).
user=> (pr-str '#"\d")
"#\"\\d\""
user=> (edn/read-string (pr-str '#"\d"))
RuntimeException No dispatch macro for: " Clojure.lang.Util.runtimeException (Util.java:221)
I'm using Clojure 1.8.0.
Any suggestions?
Thanks!
EDIT: Thanks for your answers and comments. The reason I wanted to use EDN to begin with was that I want to handle untrusted code.
The idea is that I want to read this code (any syntactically-valid Clojure code), and then pass it through some special-purpose static analysis to make sure it complies with a specific subset of Clojure that I consider "safe", and only if it complies I would consider it safe to execute this code. For this reason I want to avoid load-file
, which loads the file right away, and also possibly read-string
, due to these warnings regarding it.