<div>
                    My plan for the actual JSON encode / decode is for the mapper to produce a structure that's compatible with jsx (<a href="https://github.com/talentdeficit/jsx">https://github.com/talentdeficit/jsx</a>) - that's the encoder / decoder that we currently use.   If we go the open-source route, I'd probably aim to make that pluggable so that folk can use their preferred JSON encoder.</div><div><br></div><div>Cheers,</div><div><br></div><div>Steve</div>
                <div><div><br></div><div>-- </div><div>Steve Strong</div><div>Sent with <a href="http://www.sparrowmailapp.com/?sig">Sparrow</a></div><div><br></div></div>
                 
                <p style="color: #A0A0A8;">On Friday, 14 June 2013 at 12:31, Slava Yurin wrote:</p>
                <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
                    <span><div><div><div> See <a href="https://github.com/iskra/jsonx">https://github.com/iskra/jsonx</a>. Maybe it decoder/encoder will help you.</div><div> </div><div>14.06.2013, 17:13, "Steve Strong" <<a href="mailto:steve@srstrong.com">steve@srstrong.com</a>>:</div><blockquote type="cite"><div><div>Hi,</div><div> </div><div>We have built a number of projects recently that have a mongodb backend, an HTML / javascript frontend and Erlang in the middle - pretty standard stuff.  One of the things the we end up repeating over and over is mapping data from BSON (the mongo format) to Records (our preferred in-memory format for Erlang) and JSON (to send / receive from the browser).  To add to the mix, we also like using proplists in configuration files, so have mappings from those to records as well.</div><div> </div><div>On the last project I finally got sick of doing it by hand, so knocked up a fairly simple parse transform to take the records (with their type specifications) and generate the mapping code, which has resulted in being able to do things like (note - pseudocode only!):</div><div> </div><div><font face="Courier New">Foo = build_my_record(),</font></div><div><font face="Courier New">mongo:insert(collection, mapper:record_to_bson(Foo)),</font></div><div><font face="Courier New">web_socket:send(Client, mapper:record_to_json(Foo)),</font></div><div><font face="Courier New"> </font></div><div><font face="Courier New">receive</font></div><div><font face="Courier New">{client, Response} -></font></div><div><font face="Courier New">do_stuff_with(mapper:json_to_record(foo, Response)</font></div><div><font face="Courier New">end</font></div><div> </div><div>This has worked very well, and handles about 80% of the types we throw at it.  The sorts of types that it doesn't deal with are unions and tuples, e.g.</div><div> </div><div><font face="Courier New">-record(bla, {</font></div><div><font face="Courier New">metadata :: x() | y(),</font></div><div><font face="Courier New">ratio :: {integer(), integer()}</font></div><div><font face="Courier New">}). </font></div><div> </div><div>Due to the value the simple version has had to us, I'm about to embark on a re-work that is going to aim to handle (pretty much) any type you can throw at it, and give full two-directional fidelity on the conversions (e.g., you can assert that <font face="Courier New">Data == xxx_to_record(record_to_xxx(Data))</font> ).  </div><div> </div><div>So, a couple of questions:</div><div> </div><div>1. Does such a thing already exist?  I'm no fan of re-inventing the wheel :)</div><div>2. If not, would anyone be interested in it being open-sourced?</div><div>3. If 2., then does anyone have opinions on the functionality / API etc?</div><div> </div><div>Interested in any feedback,</div><div> </div><div>Cheers,</div><div> </div><div>Steve</div><div><div>-- </div><div>Steve Strong</div><div>Sent with <a href="http://www.sparrowmailapp.com/?sig">Sparrow</a></div><div> </div><div> </div></div>,<p>_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br><a href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a></p></div></blockquote></div></div></span>
                 
                 
                 
                 
                </blockquote>
                 
                <div>
                    <br>
                </div>