on master help sign in
Move definition of 'encode' to 'Data.Aeson.Encode'
518ebebOleg Grenrus
Data/Aeson/Encode.hs+12−2
@@ -28,16 +28,26 @@ module Data.Aeson.Encode
28 ) where
28 ) where
29
29
30import Data.Aeson.Encode.Builder (encodeToBuilder)
30import Data.Aeson.Encode.Builder (encodeToBuilder)
31−import Data.Aeson.Encode.Functions (encode)
31+import Data.Aeson.Types (Value(..), ToJSON (..))
32−import Data.Aeson.Types (Value(..))
32+import Data.Aeson.Encoding (fromEncoding)
33import Data.Monoid ((<>))
33import Data.Monoid ((<>))
34import Data.Scientific (FPFormat(..), Scientific, base10Exponent)
34import Data.Scientific (FPFormat(..), Scientific, base10Exponent)
35import Data.Text.Lazy.Builder
35import Data.Text.Lazy.Builder
36import Data.Text.Lazy.Builder.Scientific (formatScientificBuilder)
36import Data.Text.Lazy.Builder.Scientific (formatScientificBuilder)
37+
37import Numeric (showHex)
38import Numeric (showHex)
39+import qualified Data.ByteString.Builder as B
38import qualified Data.HashMap.Strict as H
40import qualified Data.HashMap.Strict as H
39import qualified Data.Text as T
41import qualified Data.Text as T
40import qualified Data.Vector as V
42import qualified Data.Vector as V
43+import qualified Data.ByteString.Lazy as L
44+
45+-- | Efficiently serialize a JSON value as a lazy 'L.ByteString'.
46+--
47+-- This is implemented in terms of the 'ToJSON' class's 'toEncoding' method.
48+encode :: ToJSON a => a -> L.ByteString
49+encode = B.toLazyByteString . fromEncoding . toEncoding
50+{-# INLINE encode #-}
41
51
42-- | Encode a JSON 'Value' to a "Data.Text" 'Builder', which can be
52-- | Encode a JSON 'Value' to a "Data.Text" 'Builder', which can be
43-- embedded efficiently in a text-based protocol.
53-- embedded efficiently in a text-based protocol.
Data/Aeson/Encode/Functions.hs−15
@@ -4,28 +4,13 @@ module Data.Aeson.Encode.Functions
4 (
4 (
5 builder
5 builder
6 , char7 -- TODO: used by TH module
6 , char7 -- TODO: used by TH module
7− , encode
8 ) where
7 ) where
9
8
10import Data.Aeson.Encoding
9import Data.Aeson.Encoding
11import Data.Aeson.Types.Class
10import Data.Aeson.Types.Class
12import Data.ByteString.Builder (Builder, char7)
11import Data.ByteString.Builder (Builder, char7)
13import Data.Monoid ((<>))
12import Data.Monoid ((<>))
14−import qualified Data.ByteString.Builder as B
15−import qualified Data.ByteString.Lazy as L
16−
17−#if !MIN_VERSION_base(4,8,0)
18−import Data.Foldable (Foldable, foldMap)
19−import Data.Monoid (mempty)
20−#endif
21
13
22builder :: ToJSON a => a -> Builder
14builder :: ToJSON a => a -> Builder
23builder = fromEncoding . toEncoding
15builder = fromEncoding . toEncoding
24{-# INLINE builder #-}
16{-# INLINE builder #-}
25−
26−-- | Efficiently serialize a JSON value as a lazy 'L.ByteString'.
27−--
28−-- This is implemented in terms of the 'ToJSON' class's 'toEncoding' method.
29−encode :: ToJSON a => a -> L.ByteString
30−encode = B.toLazyByteString . builder
31−{-# INLINE encode #-}
Data/Aeson/Types/Instances.hs+10−2
@@ -90,7 +90,7 @@ import Data.Aeson.Types.Instances.Tuple ()
90import Data.Aeson.Encoding (Encoding (..), emptyArray_, dict, tuple, (>*<))
90import Data.Aeson.Encoding (Encoding (..), emptyArray_, dict, tuple, (>*<))
91
91
92import Control.Applicative (Const(..))
92import Control.Applicative (Const(..))
93−import Data.Aeson.Encode.Functions (builder, encode)
93+import Data.Aeson.Encode.Functions (builder)
94import Data.Aeson.Functions (mapHashKeyVal, mapKey, mapKeyVal)
94import Data.Aeson.Functions (mapHashKeyVal, mapKey, mapKeyVal)
95import Data.Aeson.Types.Class
95import Data.Aeson.Types.Class
96import Data.Aeson.Types.Internal
96import Data.Aeson.Types.Internal
@@ -1114,8 +1114,16 @@ instance ToJSON UTCTime where
1114 toEncoding t = Encoding (E.quote $ E.utcTime t)
1114 toEncoding t = Encoding (E.quote $ E.utcTime t)
1115
1115
1116-- | Encode something to a JSON string.
1116-- | Encode something to a JSON string.
1117+--
1118+-- TODO: remove me, this is a hack
1117stringEncoding :: (ToJSON a) => a -> Value
1119stringEncoding :: (ToJSON a) => a -> Value
1118−stringEncoding = String . T.dropAround (== '"') . T.decodeLatin1 . L.toStrict . encode
1120+stringEncoding = String
1121+ . T.dropAround (== '"')
1122+ . T.decodeLatin1
1123+ . L.toStrict
1124+ . B.toLazyByteString
1125+ . fromEncoding
1126+ . toEncoding
1119{-# INLINE stringEncoding #-}
1127{-# INLINE stringEncoding #-}
1120
1128
1121instance FromJSON UTCTime where
1129instance FromJSON UTCTime where