on master help sign in
Move definition of 'encode' to 'Data.Aeson.Encode'
commit518ebebdc679d31b86f9b55c7f8dd5c8a9dcacdc authorOleg Grenrus <oleg.grenrus@iki.fi> dateThu 2 Jun 2016, 20:50 (10 years ago) parent9f487ce
3 files changed+22−19
Data/Aeson/Encode.hs+12−2 Data/Aeson/Encode/Functions.hs−15 Data/Aeson/Types/Instances.hs+10−2
Data/Aeson/Encode.hs+12−2
@@ -28,16 +28,26 @@ module Data.Aeson.Encode
2828 ) where
2929
3030import Data.Aeson.Encode.Builder (encodeToBuilder)
31−import Data.Aeson.Encode.Functions (encode)
32−import Data.Aeson.Types (Value(..))
31+import Data.Aeson.Types (Value(..), ToJSON (..))
32+import Data.Aeson.Encoding (fromEncoding)
3333import Data.Monoid ((<>))
3434import Data.Scientific (FPFormat(..), Scientific, base10Exponent)
3535import Data.Text.Lazy.Builder
3636import Data.Text.Lazy.Builder.Scientific (formatScientificBuilder)
37+
3738import Numeric (showHex)
39+import qualified Data.ByteString.Builder as B
3840import qualified Data.HashMap.Strict as H
3941import qualified Data.Text as T
4042import 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 #-}
4151
4252-- | Encode a JSON 'Value' to a "Data.Text" 'Builder', which can be
4353-- embedded efficiently in a text-based protocol.
Data/Aeson/Encode/Functions.hs−15
@@ -4,28 +4,13 @@ module Data.Aeson.Encode.Functions
44 (
55 builder
66 , char7 -- TODO: used by TH module
7− , encode
87 ) where
98
109import Data.Aeson.Encoding
1110import Data.Aeson.Types.Class
1211import Data.ByteString.Builder (Builder, char7)
1312import 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
2113
2214builder :: ToJSON a => a -> Builder
2315builder = fromEncoding . toEncoding
2416{-# 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 ()
9090import Data.Aeson.Encoding (Encoding (..), emptyArray_, dict, tuple, (>*<))
9191
9292import Control.Applicative (Const(..))
93−import Data.Aeson.Encode.Functions (builder, encode)
93+import Data.Aeson.Encode.Functions (builder)
9494import Data.Aeson.Functions (mapHashKeyVal, mapKey, mapKeyVal)
9595import Data.Aeson.Types.Class
9696import Data.Aeson.Types.Internal
@@ -1114,8 +1114,16 @@ instance ToJSON UTCTime where
11141114 toEncoding t = Encoding (E.quote $ E.utcTime t)
11151115
11161116-- | Encode something to a JSON string.
1117+--
1118+-- TODO: remove me, this is a hack
11171119stringEncoding :: (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
11191127{-# INLINE stringEncoding #-}
11201128
11211129instance FromJSON UTCTime where