on master help sign in
Export stuff
7c8bbcaBryan O'Sullivan
Data/Aeson/Encode/ByteString.hs+16−4
@@ -15,6 +15,12 @@ module Data.Aeson.Encode.ByteString
15 ( encode
15 ( encode
16 , encodeToBuilder
16 , encodeToBuilder
17 , encodeToByteStringBuilder
17 , encodeToByteStringBuilder
18+ , null_
19+ , bool
20+ , array
21+ , object
22+ , text
23+ , number
18 ) where
24 ) where
19
25
20import Data.Aeson.Types (ToJSON(..), Value(..))
26import Data.Aeson.Types (ToJSON(..), Value(..))
@@ -41,7 +47,7 @@ encodeToBuilder :: Value -> Builder
41encodeToBuilder Null = null_
47encodeToBuilder Null = null_
42encodeToBuilder (Bool b) = bool b
48encodeToBuilder (Bool b) = bool b
43encodeToBuilder (Number n) = number n
49encodeToBuilder (Number n) = number n
44−encodeToBuilder (String s) = string s
50+encodeToBuilder (String s) = text s
45encodeToBuilder (Array v) = array v
51encodeToBuilder (Array v) = array v
46encodeToBuilder (Object m) = object m
52encodeToBuilder (Object m) = object m
47
53
@@ -50,13 +56,16 @@ encodeToByteStringBuilder :: Value -> Builder
50encodeToByteStringBuilder = encodeToBuilder
56encodeToByteStringBuilder = encodeToBuilder
51{-# DEPRECATED encodeToByteStringBuilder "Use encodeToBuilder instead." #-}
57{-# DEPRECATED encodeToByteStringBuilder "Use encodeToBuilder instead." #-}
52
58
59+-- | Encode a JSON null.
53null_ :: Builder
60null_ :: Builder
54null_ = BP.primBounded (ascii4 ('n',('u',('l','l')))) ()
61null_ = BP.primBounded (ascii4 ('n',('u',('l','l')))) ()
55
62
63+-- | Encode a JSON boolean.
56bool :: Bool -> Builder
64bool :: Bool -> Builder
57bool = BP.primBounded (BP.condB id (ascii4 ('t',('r',('u','e'))))
65bool = BP.primBounded (BP.condB id (ascii4 ('t',('r',('u','e'))))
58 (ascii5 ('f',('a',('l',('s','e'))))))
66 (ascii5 ('f',('a',('l',('s','e'))))))
59
67
68+-- | Encode a JSON array.
60array :: V.Vector Value -> Builder
69array :: V.Vector Value -> Builder
61array v
70array v
62 | V.null v = B.char8 '[' <> B.char8 ']'
71 | V.null v = B.char8 '[' <> B.char8 ']'
@@ -66,16 +75,18 @@ array v
66 where
75 where
67 withComma a z = B.char8 ',' <> encodeToBuilder a <> z
76 withComma a z = B.char8 ',' <> encodeToBuilder a <> z
68
77
78+-- Encode a JSON object.
69object :: HMS.HashMap T.Text Value -> Builder
79object :: HMS.HashMap T.Text Value -> Builder
70object m = case HMS.toList m of
80object m = case HMS.toList m of
71 (x:xs) -> B.char8 '{' <> one x <> foldr withComma (B.char8 '}') xs
81 (x:xs) -> B.char8 '{' <> one x <> foldr withComma (B.char8 '}') xs
72 _ -> B.char8 '{' <> B.char8 '}'
82 _ -> B.char8 '{' <> B.char8 '}'
73 where
83 where
74 withComma a z = B.char8 ',' <> one a <> z
84 withComma a z = B.char8 ',' <> one a <> z
75− one (k,v) = string k <> B.char8 ':' <> encodeToBuilder v
85+ one (k,v) = text k <> B.char8 ':' <> encodeToBuilder v
76
86
87+-- | Encode a JSON string.
77−string :: T.Text -> B.Builder
88+text :: T.Text -> Builder
78−string t =
89+text t =
79 B.char8 '"' <> TE.encodeUtf8BuilderEscaped escapeAscii t <> B.char8 '"'
90 B.char8 '"' <> TE.encodeUtf8BuilderEscaped escapeAscii t <> B.char8 '"'
80 where
91 where
81 escapeAscii :: BP.BoundedPrim Word8
92 escapeAscii :: BP.BoundedPrim Word8
@@ -94,6 +105,7 @@ string t =
94 hexEscape = (\c -> ('\\', ('u', fromIntegral c))) BP.>$<
105 hexEscape = (\c -> ('\\', ('u', fromIntegral c))) BP.>$<
95 BP.char8 BP.>*< BP.char8 BP.>*< BP.word16HexFixed
106 BP.char8 BP.>*< BP.char8 BP.>*< BP.word16HexFixed
96
107
108+-- | Encode a JSON number.
97number :: Scientific -> Builder
109number :: Scientific -> Builder
98number s
110number s
99 | e < 0 = scientificBuilder s
111 | e < 0 = scientificBuilder s