on master help sign in
Add functions to convert between RawObjects and Json.Values
6c3af88Evan Czaplicki
libraries/JavaScript/Experimental.elm+26−13
@@ -9,6 +9,7 @@ improve as we find its key failings.
9-}
9-}
10
10
11import Native.JavaScript
11import Native.JavaScript
12+import Json
12
13
13data RawObject = RawObject
14data RawObject = RawObject
14
15
@@ -16,13 +17,13 @@ data RawObject = RawObject
16Arrays are converted into lists, nested objects are allowed.
17Arrays are converted into lists, nested objects are allowed.
17No `null` values or non-homogeneous arrays.
18No `null` values or non-homogeneous arrays.
18
19
19− -- OK objects
20+ -- OK objects
20− { student:"Steve", scores:[83,94,99,72] }
21+ { student:"Steve", scores:[83,94,99,72] }
21− { errorLevel:10, critical:true }
22+ { errorLevel:10, critical:true }
22
23
23− -- BAD objects
24+ -- BAD objects
24− { answer:null }
25+ { answer:null }
25− { info:[true,42,'what'] }
26+ { info:[true,42,'what'] }
26-}
27-}
27toRecord : RawObject -> a
28toRecord : RawObject -> a
28toRecord = Native.JavaScript.toRecord
29toRecord = Native.JavaScript.toRecord
@@ -30,13 +31,25 @@ toRecord = Native.JavaScript.toRecord
30{-| Turn arbitrary Elm records into JavaScript objects.
31{-| Turn arbitrary Elm records into JavaScript objects.
31Lists become arrays, nested records are allowed. No ADTs.
32Lists become arrays, nested records are allowed. No ADTs.
32
33
33− -- OK records
34+ -- OK records
34− { student="Steve", scores=[83,94,99,72] }
35+ { student="Steve", scores=[83,94,99,72] }
35− { errorLevel=10, critical=True }
36+ { errorLevel=10, critical=True }
36
37
37− -- BAD records
38+ -- BAD records
38− { answer = Nothing }
39+ { answer = Nothing }
39− { result = Left "An error occurred" }
40+ { result = Left "An error occurred" }
40-}
41-}
41fromRecord : a -> RawObject
42fromRecord : a -> RawObject
42−fromRecord = Native.JavaScript.fromRecord
43+fromRecord = Native.JavaScript.fromRecord
44+
45+{-| Turn a raw JavaScript object into a `Json.Value` as described in the
46+`Json` library.
47+-}
48+toJson : RawObject -> Json.Value
49+toJson = Native.Json.fromJS
50+
51+{-| Turn a `Json.Value` (as described in the `Json` library) into a raw
52+JavaScript object.
53+-}
54+fromJson : Json.Value -> RawObject
55+fromJson = Native.Json.toJS
libraries/Native/Json.js+3−1
@@ -63,8 +63,10 @@ Elm.Native.Json.make = function(elm) {
63 }
63 }
64
64
65 return elm.Native.Json.values = {
65 return elm.Native.Json.values = {
66− toString : F2(toString),
66+ toString : F2(toString),
67 fromString : fromString,
67 fromString : fromString,
68+ fromJS : fromJS,
69+ toJS : toJS,
68 };
70 };
69
71
70};
72};