2013-03-03 05:43:44 +00:00
|
|
|
|
2013-03-09 07:22:15 +00:00
|
|
|
Elm.Native.Json = function(elm) {
|
2013-03-03 05:43:44 +00:00
|
|
|
'use strict';
|
|
|
|
|
2013-03-09 07:22:15 +00:00
|
|
|
var Maybe = Elm.Maybe(elm);
|
|
|
|
var Dict = Elm.Dict(elm);
|
|
|
|
var List = Elm.List(elm);
|
|
|
|
var JS = Elm.JavaScript(elm);
|
2013-03-03 05:43:44 +00:00
|
|
|
|
|
|
|
function fromValue(v) {
|
|
|
|
switch (v.ctor) {
|
|
|
|
case 'Null' : return null;
|
|
|
|
case 'String' : return JS.fromString(v._0);
|
|
|
|
case 'Object' :
|
|
|
|
var obj = {};
|
2013-03-09 07:22:15 +00:00
|
|
|
var array = JS.fromList(Dict.toList(v._0));
|
2013-03-03 05:43:44 +00:00
|
|
|
for (var i = arr.length; i--; ) {
|
|
|
|
obj[JS.fromString(array[i]._0)] = fromValue(array[i]._1);
|
|
|
|
}
|
|
|
|
return obj;
|
|
|
|
case 'Array' :
|
|
|
|
var array = JS.fromList(v._0);
|
|
|
|
for (var i = array.length; i--; ) {
|
|
|
|
array[i] = fromValue(array[i]);
|
|
|
|
}
|
|
|
|
return array;
|
|
|
|
default :
|
|
|
|
return v._0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function toPrettyJSString(sep, obj) {
|
|
|
|
return JSON.stringify(fromValue(obj), null, JS.fromString(sep));
|
|
|
|
}
|
|
|
|
|
|
|
|
function toValue(v) {
|
|
|
|
switch (typeof v) {
|
|
|
|
case 'string' : return { ctor:"String", _0: JS.toString(v) };
|
|
|
|
case 'number' : return { ctor:"Number", _0: JS.toFloat(v) };
|
|
|
|
case 'boolean': return { ctor:"Bool" , _0: JS.toBool(v) };
|
|
|
|
case 'object' :
|
|
|
|
if (v === null) return { ctor:"Null" };
|
|
|
|
if (v instanceof Array) {
|
|
|
|
for (var i = v.length; i--; ) { v[i] = toValue(v[i]); }
|
|
|
|
return { ctor:"Array", _0: JS.toList(v) };
|
|
|
|
}
|
|
|
|
var array = [];
|
|
|
|
for (var k in v) array.push(Tuple2(JS.toString(k), toValue(v[k])));
|
2013-03-09 07:22:15 +00:00
|
|
|
return { ctor:"Object", _0: Dict.fromList(JS.toList(array)) };
|
2013-03-03 05:43:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function fromJSString(str) {
|
|
|
|
try {
|
2013-03-09 07:22:15 +00:00
|
|
|
return Maybe.Just(toValue(JSON.parse(str)));
|
2013-03-03 05:43:44 +00:00
|
|
|
} catch (e) {
|
2013-03-09 07:22:15 +00:00
|
|
|
return Maybe.Nothing;
|
2013-03-03 05:43:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function recordFromJSString(str) {
|
|
|
|
try {
|
2013-03-09 07:22:15 +00:00
|
|
|
return Maybe.Just(JS.toRecord(JSON.parse(str)));
|
2013-03-03 05:43:44 +00:00
|
|
|
} catch (e) {
|
2013-03-09 07:22:15 +00:00
|
|
|
return Maybe.Nothing;
|
2013-03-03 05:43:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
function recordToPrettyJSString(sep, rec) {
|
|
|
|
return JSON.stringify(JS.fromRecord(rec), null, JS.fromString(sep));
|
|
|
|
}
|
|
|
|
|
2013-03-09 07:22:15 +00:00
|
|
|
return elm.Native.Json = {
|
2013-03-03 05:43:44 +00:00
|
|
|
toPrettyJSString : F2(toPrettyJSString),
|
|
|
|
fromJSString : fromJSString,
|
|
|
|
recordToPrettyJSString : F2(recordToPrettyJSString),
|
|
|
|
recordFromJSString : recordFromJSString
|
|
|
|
};
|
|
|
|
|
2013-03-09 07:22:15 +00:00
|
|
|
};
|