on master help sign in
Incorporate Json.String into Json.Encode
1504b0dEvan Czaplicki
compiler/src/Json/Encode.hs+19−21
@@ -10,6 +10,7 @@ module Json.Encode
10 , object
10 , object
11 , string
11 , string
12 , name
12 , name
13+ , chars
13 , bool
14 , bool
14 , int
15 , int
15 , number
16 , number
@@ -32,6 +33,7 @@ import qualified Data.Name as Name
32import qualified Data.Utf8 as Utf8
33import qualified Data.Utf8 as Utf8
33
34
34import qualified File
35import qualified File
36+import qualified Json.String as Json
35
37
36
38
37
39
@@ -40,7 +42,7 @@ import qualified File
40
42
41data Value
43data Value
42 = Array [Value]
44 = Array [Value]
43− | Object [(Utf8.String, Value)]
45+ | Object [(Json.String, Value)]
44 | String B.Builder
46 | String B.Builder
45 | Boolean Bool
47 | Boolean Bool
46 | Integer Int
48 | Integer Int
@@ -53,14 +55,14 @@ array =
53 Array
55 Array
54
56
55
57
56−object :: [(Utf8.String,Value)] -> Value
58+object :: [(Json.String, Value)] -> Value
57object =
59object =
58 Object
60 Object
59
61
60
62
61−string :: Utf8.String -> Value
63+string :: Json.String -> Value
62string str =
64string str =
63− String (encodeUtf8 str)
65+ String (B.char7 '"' <> Json.toBuilder str <> B.char7 '"')
64
66
65
67
66name :: Name.Name -> Value
68name :: Name.Name -> Value
@@ -68,6 +70,11 @@ name nm =
68 String (B.char7 '"' <> Name.toBuilder nm <> B.char7 '"')
70 String (B.char7 '"' <> Name.toBuilder nm <> B.char7 '"')
69
71
70
72
73+chars :: [Char] -> Value
74+chars chrs =
75+ String (B.char7 '"' <> error "TODO escape this properly. Who is using this?" chrs <> B.char7 '"')
76+
77+
71bool :: Bool -> Value
78bool :: Bool -> Value
72bool =
79bool =
73 Boolean
80 Boolean
@@ -88,7 +95,7 @@ null =
88 Null
95 Null
89
96
90
97
91−dict :: (k -> Utf8.String) -> (v -> Value) -> Map.Map k v -> Value
98+dict :: (k -> Json.String) -> (v -> Value) -> Map.Map k v -> Value
92dict encodeKey encodeValue pairs =
99dict encodeKey encodeValue pairs =
93 Object $ map (encodeKey *** encodeValue) (Map.toList pairs)
100 Object $ map (encodeKey *** encodeValue) (Map.toList pairs)
94
101
@@ -102,9 +109,9 @@ list encodeEntry entries =
102-- HELPERS
109-- HELPERS
103
110
104
111
105−(==>) :: a -> b -> (a, b)
112+(==>) :: [Char] -> value -> (Json.String, value)
106−(==>) a b =
113+(==>) key value =
107− (a, b)
114+ (Json.fromChars key, value)
108
115
109
116
110
117
@@ -144,7 +151,7 @@ encodeUgly value =
144 Object (first : rest) ->
151 Object (first : rest) ->
145 let
152 let
146 encodeEntry char (key, entry) =
153 encodeEntry char (key, entry) =
147− B.char7 char <> encodeUtf8 key <> B.char7 ':' <> encodeUgly entry
154+ B.char7 char <> B.char7 '"' <> Utf8.toBuilder key <> B.string7 "\":" <> encodeUgly entry
148 in
155 in
149 encodeEntry '{' first <> mconcat (map (encodeEntry ',') rest) <> B.char7 '}'
156 encodeEntry '{' first <> mconcat (map (encodeEntry ',') rest) <> B.char7 '}'
150
157
@@ -205,15 +212,6 @@ encodeHelp indent value =
205
212
206
213
207
214
208−-- ENCODE UTF-8
209−
210−
211−encodeUtf8 :: Utf8.String -> B.Builder
212−encodeUtf8 str =
213− B.char7 '"' <> Utf8.toBuilder str <> B.char7 '"'
214−
215−
216−
217-- ENCODE ARRAY
215-- ENCODE ARRAY
218
216
219
217
@@ -236,7 +234,7 @@ arrayClose =
236-- ENCODE OBJECT
234-- ENCODE OBJECT
237
235
238
236
239−encodeObject :: BSC.ByteString -> (Utf8.String, Value) -> [(Utf8.String, Value)] -> B.Builder
237+encodeObject :: BSC.ByteString -> (Json.String, Value) -> [(Json.String, Value)] -> B.Builder
240encodeObject =
238encodeObject =
241 encodeSequence objectOpen objectClose encodeField
239 encodeSequence objectOpen objectClose encodeField
242
240
@@ -251,9 +249,9 @@ objectClose =
251 B.char7 '}'
249 B.char7 '}'
252
250
253
251
254−encodeField :: BSC.ByteString -> (Utf8.String, Value) -> B.Builder
252+encodeField :: BSC.ByteString -> (Json.String, Value) -> B.Builder
255encodeField indent (key, value) =
253encodeField indent (key, value) =
256− encodeUtf8 key <> B.string7 ": " <> encodeHelp indent value
254+ B.char7 '"' <> Utf8.toBuilder key <> B.string7 "\": " <> encodeHelp indent value
257
255
258
256
259
257