on master help sign in
Move the encode function to a more convenient place
fa4dfb6Bryan O'Sullivan
Data/Aeson/Encode.hs+2−10
@@ -28,25 +28,17 @@ 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.Types (ToJSON(..), Value(..), fromEncoding)
31+import Data.Aeson.Encode.Functions (encode)
32+import Data.Aeson.Types (Value(..))
32import Data.Monoid ((<>))
33import Data.Monoid ((<>))
33import Data.Scientific (FPFormat(..), Scientific, base10Exponent)
34import Data.Scientific (FPFormat(..), Scientific, base10Exponent)
34import Data.Text.Lazy.Builder
35import Data.Text.Lazy.Builder
35import Data.Text.Lazy.Builder.Scientific (formatScientificBuilder)
36import Data.Text.Lazy.Builder.Scientific (formatScientificBuilder)
36import Numeric (showHex)
37import Numeric (showHex)
37−import qualified Data.ByteString.Builder as B
38−import qualified Data.ByteString.Lazy as L
39import qualified Data.HashMap.Strict as H
38import qualified Data.HashMap.Strict as H
40import qualified Data.Text as T
39import qualified Data.Text as T
41import qualified Data.Vector as V
40import qualified Data.Vector as V
42
41
43−-- | Efficiently serialize a JSON value as a lazy 'L.ByteString'.
44−--
45−-- This is implemented in terms of the 'ToJSON' class's 'toEncoding' method.
46−encode :: ToJSON a => a -> L.ByteString
47−encode = B.toLazyByteString . fromEncoding . toEncoding
48−{-# INLINE encode #-}
49−
50-- | Encode a JSON 'Value' to a "Data.Text" 'Builder', which can be
42-- | Encode a JSON 'Value' to a "Data.Text" 'Builder', which can be
51-- embedded efficiently in a text-based protocol.
43-- embedded efficiently in a text-based protocol.
52--
44--
Data/Aeson/Encode/Functions.hs+10
@@ -3,6 +3,7 @@ module Data.Aeson.Encode.Functions
3 brackets
3 brackets
4 , builder
4 , builder
5 , char7
5 , char7
6+ , encode
6 , foldable
7 , foldable
7 , list
8 , list
8 , pairs
9 , pairs
@@ -15,11 +16,20 @@ import Data.ByteString.Builder (Builder, char7)
15import Data.ByteString.Builder.Prim (primBounded)
16import Data.ByteString.Builder.Prim (primBounded)
16import Data.Foldable (Foldable, foldMap)
17import Data.Foldable (Foldable, foldMap)
17import Data.Monoid ((<>), mempty)
18import Data.Monoid ((<>), mempty)
19+import qualified Data.ByteString.Builder as B
20+import qualified Data.ByteString.Lazy as L
18
21
19builder :: ToJSON a => a -> Builder
22builder :: ToJSON a => a -> Builder
20builder = fromEncoding . toEncoding
23builder = fromEncoding . toEncoding
21{-# INLINE builder #-}
24{-# INLINE builder #-}
22
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 #-}
32+
23-- | Encode a 'Foldable' as a JSON array.
33-- | Encode a 'Foldable' as a JSON array.
24foldable :: (Foldable t, ToJSON a) => t a -> Encoding
34foldable :: (Foldable t, ToJSON a) => t a -> Encoding
25foldable = brackets '[' ']' . foldMap (Value . toEncoding)
35foldable = brackets '[' ']' . foldMap (Value . toEncoding)