Heh didn't notice the date on the first post :)
On Thu, May 9, 2013 at 8:29 PM, Thomas Heller <i...@zilence.net> wrote: > Hey Brian, > > been a while since that Post, Issue #1 has been resolved for a while (see > http://dev.clojure.org/jira/browse/CLJS-466) but I actually switched to > using proper EDN tags via IPrintWithWriter, clj/print-method and > clojure.edn/read-string like you suggested. > > #2 I solved indirectly via #1, I didnt find an acceptable BigDecimal > JavaScript implementation and since all the math happens on the server > anyways I just transmit them as Strings inside records. The Reader function > in CLJS just keeps it as a String, the CLJ Reader function just does > (BigDecimal. s) so all is good. (eg. #ns/money [:EUR "1234567.89"]) > > > > > On Thu, May 9, 2013 at 9:03 PM, Brian Jenkins <bonky...@gmail.com> wrote: > >> Hi, Thomas. >> >> I also found this frustrating. Here's a work-around I came up with: >> >> >> ;; assuming (defrecord Design [id name]) in namespace tektite.model.design >> >> (cljs.reader/register-tag-parser! "tektite.model.design.Design" >> tektite.model.design/map->Design) >> >> (extend-protocol IPrintWithWriter >> tektite.model.design/Design >> (-pr-writer [coll writer opts] >> (let [pr-pair (fn [keyval] (pr-sequential-writer writer pr-writer "" >> " " "" opts keyval))] >> (pr-sequential-writer writer pr-pair >> "#tektite.model.design.Design{" ", " "}" opts coll)))) >> >> >> On the server side, I read EDN out of the request body with >> clojure.edn/read (because clojure.core/read is >> unsafe for reading evil strings from the internet). clojure.edn/read >> doesn't pick up new readers >> from data_readers.clj or *data-readers* (fortunately), but can be taught >> new tags like this: >> >> >> (def model-readers {'tektite.model.design.Design >> #'tektite.model.design/map->Design}) >> >> (defn read-edn-body [context] >> (clojure.edn/read {:readers model-readers, :eof nil} >> (java.io.PushbackReader. >> (java.io.InputStreamReader. >> (get-in context [:request :body]) >> "UTF-8")))) >> >> >> (I use liberator, so the request arrives in a context hash) >> >> Best, >> Brian >> >> On Monday, January 7, 2013 1:13:30 AM UTC+1, Thomas Heller wrote: >>> >>> Hey, >>> >>> I'm writing a Clojure Webapp with a CLJS Frontend and expected to be >>> able to cljs.reader/read-string everything I pr-str'd on the CLJ side. That >>> however does not work for defrecords and BigDecimals (1.1M) . >>> >>> 1. defrecord >>> >>> In CLJ I can: >>> >>> (ns dummy) >>> (defrecord Foo [bar]) >>> (pr-str (Foo. 1)) ; => "#dummy.Foo{:bar 1}" >>> >>> in CLJS however this will print as >>> >>> "#Foo{:bar 1}" >>> >>> missing the Namespace. I found an old >>> post<https://groups.google.com/d/msg/clojure/YSkPd4zQTKQ/757Wd4Ex8pAJ>about >>> this but no other information. >>> >>> Also when I pr-str this record in CLJ and cljs.reader/read-string it in >>> CLJS it fails with "Could not find tag parser for dummy.Foo in ("inst" >>> "uuid" "queue") ", although the defrecord exists and is in the same ns >>> (actually a cljsbuild crossover). I figured out that I can >>> (cljs.reader/register-tag-**parser! 'dummy.Foo make-foo) but thats >>> seems faulty. I read about EDN and understand why the reader would think >>> its reading a Tag but I can do read-string in CLJ just fine. Shouldnt both >>> sides be equal here? >>> >> -- >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clojure@googlegroups.com >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+unsubscr...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to a topic in the >> Google Groups "Clojure" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/clojure/4aeIxs_yNG4/unsubscribe?hl=en. >> To unsubscribe from this group and all its topics, send an email to >> clojure+unsubscr...@googlegroups.com. >> >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > -- > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.