packages feed

buffer-builder 0.2.4.4 → 0.2.4.5

raw patch · 4 files changed

+57/−9 lines, 4 filesPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

API changes (from Hackage documentation)

+ Data.BufferBuilder.Json: instance Data.Semigroup.Semigroup Data.BufferBuilder.Json.ObjectBuilder

Files

bench/JsonBench.hs view
@@ -129,23 +129,38 @@         Green -> "green" :: Text         Blue -> "blue"         Brown -> "brown"+    toEncoding ec = Aeson.toEncoding $ case ec of+        Green -> "green" :: Text+        Blue -> "blue"+        Brown -> "brown"  instance Aeson.ToJSON Gender where     toJSON g = Aeson.toJSON $ case g of         Male -> "male" :: Text         Female -> "female"+    toEncoding g = Aeson.toEncoding $ case g of+        Male -> "male" :: Text+        Female -> "female"  instance Aeson.ToJSON Fruit where     toJSON f = Aeson.toJSON $ case f of         Apple -> "apple" :: Text         Banana -> "banana"         Strawberry -> "strawberry"+    toEncoding f = Aeson.toEncoding $ case f of+        Apple -> "apple" :: Text+        Banana -> "banana"+        Strawberry -> "strawberry"  instance Aeson.ToJSON Friend where     toJSON Friend {..} = Aeson.object         [ "id" Aeson..= fId         , "name" Aeson..= fName         ]+    toEncoding Friend {..} = Aeson.pairs+        ( "id" Aeson..= fId+        <> "name" Aeson..= fName+        )  instance Aeson.ToJSON User where     toJSON User{..} = Aeson.object@@ -172,7 +187,30 @@         , "greeting" Aeson..= uGreeting         , "favoriteFruit" Aeson..= uFavouriteFruit         ]-+    toEncoding User{..} = Aeson.pairs+        ( "_id" Aeson..= uId+        <> "index" Aeson..= uIndex+        <> "guid" Aeson..= uGuid+        <> "isActive" Aeson..= uIsActive+        <> "balance" Aeson..= uBalance+        <> "picture" Aeson..= uPicture+        <> "age" Aeson..= uAge+        <> "eyeColor" Aeson..= uEyeColor+        <> "name" Aeson..= uName+        <> "gender" Aeson..= uGender+        <> "company" Aeson..= uCompany+        <> "email" Aeson..= uEmail+        <> "phone" Aeson..= uPhone+        <> "address" Aeson..= uAddress+        <> "about" Aeson..= uAbout+        <> "registered" Aeson..= uRegistered+        <> "latitude" Aeson..= uLatitude+        <> "longitude" Aeson..= uLongitude+        <> "tags" Aeson..= uTags+        <> "friends" Aeson..= uFriends+        <> "greeting" Aeson..= uGreeting+        <> "favoriteFruit" Aeson..= uFavouriteFruit+        ) --- BufferBuilder instances ---  instance Json.ToJson EyeColor where@@ -329,6 +367,7 @@                 , bgroup "render"                     [ bench "bufferbuilder" $ nf Json.encodeJson parsedUserList                     , bench "aeson" $ nf Aeson.encode parsedUserList+                    , bench "aeson-value" $ nf (Aeson.encode . Aeson.toJSON) parsedUserList                     , bench "json-builder" $ nf JB.toJsonLBS parsedUserList                     ]                 , bgroup "addr vs text keys"
buffer-builder.cabal view
@@ -1,5 +1,5 @@ name:                buffer-builder-version:             0.2.4.4+version:             0.2.4.5 synopsis:            Library for efficiently building up buffers, one piece at a time description: 
changelog.md view
@@ -1,3 +1,7 @@+0.2.4.5++* Add Semigroup instance for ObjectBuilder+ 0.2.4.4  * Add 'stdc++' as an explicit library dependency.  (Thanks Rob Dockins!)
src/Data/BufferBuilder/Json.hs view
@@ -55,7 +55,8 @@ import Data.BufferBuilder.Utf8 (Utf8Builder) import qualified Data.BufferBuilder.Utf8 as UB import Data.ByteString (ByteString)-import Data.Monoid+import Data.Monoid hiding ((<>))+import Data.Semigroup import Data.Text (Text) import Data.Foldable (Foldable, foldMap) import qualified Data.Vector as Vector@@ -142,17 +143,21 @@ -- resulting JSON document will be illegal. data ObjectBuilder = NoPair | Pair !(Utf8Builder ()) +instance Semigroup ObjectBuilder where+    {-# INLINE (<>) #-}+    NoPair <> a = a+    a <> NoPair = a+    (Pair a) <> (Pair b) = Pair $ do+        a+        UB.appendChar7 ','+        b+ instance Monoid ObjectBuilder where     {-# INLINE mempty #-}     mempty = NoPair      {-# INLINE mappend #-}-    mappend NoPair a = a-    mappend a NoPair = a-    mappend (Pair a) (Pair b) = Pair $ do -        a-        UB.appendChar7 ','-        b+    mappend = (<>)  instance ToJson ObjectBuilder where     {-# INLINE toJson #-}