packages feed

json-bytes-builder 0.2.1.2 → 0.3

raw patch · 6 files changed

+84/−84 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- JSONBytesBuilder.Builder: data Array
- JSONBytesBuilder.Builder: data JSON
- JSONBytesBuilder.Builder: data Object
- JSONBytesBuilder.Builder: instance GHC.Base.Monoid JSONBytesBuilder.Builder.Array
- JSONBytesBuilder.Builder: instance GHC.Base.Monoid JSONBytesBuilder.Builder.Object
- JSONBytesBuilder.Interpreters.ByteString: compactJSON :: JSON -> ByteString
- JSONBytesBuilder.Interpreters.ByteStringBuilder: compactJSON :: JSON -> Builder
- JSONBytesBuilder.Interpreters.LazyByteString: compactJSON :: JSON -> ByteString
+ JSONBytesBuilder.Builder: data Elements
+ JSONBytesBuilder.Builder: data Literal
+ JSONBytesBuilder.Builder: data Rows
+ JSONBytesBuilder.Builder: instance GHC.Base.Monoid JSONBytesBuilder.Builder.Elements
+ JSONBytesBuilder.Builder: instance GHC.Base.Monoid JSONBytesBuilder.Builder.Rows
+ JSONBytesBuilder.Interpreters.ByteString: jsonLiteral :: Literal -> ByteString
+ JSONBytesBuilder.Interpreters.ByteStringBuilder: jsonLiteral :: Literal -> Builder
+ JSONBytesBuilder.Interpreters.LazyByteString: jsonLiteral :: Literal -> ByteString
- JSONBytesBuilder.Builder: array :: Array -> JSON
+ JSONBytesBuilder.Builder: array :: Elements -> Literal
- JSONBytesBuilder.Builder: boolean :: Bool -> JSON
+ JSONBytesBuilder.Builder: boolean :: Bool -> Literal
- JSONBytesBuilder.Builder: element :: JSON -> Array
+ JSONBytesBuilder.Builder: element :: Literal -> Elements
- JSONBytesBuilder.Builder: null :: JSON
+ JSONBytesBuilder.Builder: null :: Literal
- JSONBytesBuilder.Builder: number_double :: Double -> JSON
+ JSONBytesBuilder.Builder: number_double :: Double -> Literal
- JSONBytesBuilder.Builder: number_int :: Int -> JSON
+ JSONBytesBuilder.Builder: number_int :: Int -> Literal
- JSONBytesBuilder.Builder: number_integer :: Integer -> JSON
+ JSONBytesBuilder.Builder: number_integer :: Integer -> Literal
- JSONBytesBuilder.Builder: number_scientific :: Scientific -> JSON
+ JSONBytesBuilder.Builder: number_scientific :: Scientific -> Literal
- JSONBytesBuilder.Builder: object :: Object -> JSON
+ JSONBytesBuilder.Builder: object :: Rows -> Literal
- JSONBytesBuilder.Builder: row :: Text -> JSON -> Object
+ JSONBytesBuilder.Builder: row :: Text -> Literal -> Rows
- JSONBytesBuilder.Builder: string :: Text -> JSON
+ JSONBytesBuilder.Builder: string :: Text -> Literal

Files

demo/Main.hs view
@@ -13,7 +13,7 @@ --  -- >{"name":"Metallica","genres":[{"name":"Metal"},{"name":"Rock"},{"name":"Blues"}]} main =-  C.putStrLn (B.compactJSON metallica)+  C.putStrLn (B.jsonLiteral metallica)   -- * Model@@ -29,7 +29,7 @@ -- * Builders ------------------------- -artist :: Artist -> A.JSON+artist :: Artist -> A.Literal artist (Artist name genres) =   A.object rows   where@@ -40,13 +40,13 @@         genresElements =           foldMap (A.element . genre) genres -genre :: Genre -> A.JSON+genre :: Genre -> A.Literal genre (Genre name) =   A.object rows   where     rows =       A.row "name" (A.string name) -metallica :: A.JSON+metallica :: A.Literal metallica =   artist (Artist "Metallica" [Genre "Metal", Genre "Rock", Genre "Blues"])
json-bytes-builder.cabal view
@@ -1,7 +1,7 @@ name:   json-bytes-builder version:-  0.2.1.2+  0.3 synopsis:   Direct-to-bytes JSON Builder description:@@ -9,7 +9,7 @@   which is faster and simpler than \"aeson\".   .   Check out-  <http://hackage.haskell.org/package/json-bytes-builder-0.2.1.2/src/demo/Main.hs the demo>.+  <http://hackage.haskell.org/package/json-bytes-builder-0.3/src/demo/Main.hs the demo>. category:   JSON, Codecs homepage:
library/JSONBytesBuilder/Builder.hs view
@@ -2,8 +2,8 @@ -- DSL for construction of JSON. module JSONBytesBuilder.Builder (-  -- ** JSON builders-  JSON,+  -- ** Literal builders+  Literal,   null,   boolean,   number_int,@@ -13,11 +13,11 @@   string,   object,   array,-  -- ** Object builders-  Object,+  -- ** Rows builders+  Rows,   row,-  -- ** Array builders-  Array,+  -- ** Elements builders+  Elements,   element, ) where@@ -28,134 +28,134 @@   -- |--- Builder of any JSON value.-newtype JSON =-  JSON A.Builder+-- Builder of any JSON literal.+newtype Literal =+  Literal A.Builder  -- |--- Builder of a JSON Object value.-newtype Object =-  Object (Maybe A.Builder)+-- Builder of JSON Object rows.+newtype Rows =+  Rows (Maybe A.Builder) -instance Monoid Object where+instance Monoid Rows where   {-# INLINE mempty #-}   mempty =-    Object Nothing+    Rows Nothing   {-# INLINE mappend #-}   mappend =     \case-      Object (Just left) ->+      Rows (Just left) ->         \case-          Object (Just right) ->-            Object (Just (left <> A.char8 ',' <> right))+          Rows (Just right) ->+            Rows (Just (left <> A.char8 ',' <> right))           _ ->-            Object (Just left)-      Object Nothing ->+            Rows (Just left)+      Rows Nothing ->         id  -- |--- Builder of a JSON Array value.-newtype Array =-  Array (Maybe A.Builder)+-- Builder of JSON Array elements.+newtype Elements =+  Elements (Maybe A.Builder) -instance Monoid Array where+instance Monoid Elements where   {-# INLINE mempty #-}   mempty =-    Array Nothing+    Elements Nothing   {-# INLINE mappend #-}   mappend =     \case-      Array (Just left) ->+      Elements (Just left) ->         \case-          Array (Just right) ->-            Array (Just (left <> A.char8 ',' <> right))+          Elements (Just right) ->+            Elements (Just (left <> A.char8 ',' <> right))           _ ->-            Array (Just left)-      Array Nothing ->+            Elements (Just left)+      Elements Nothing ->         id  -- | -- JSON Null literal. {-# INLINE null #-}-null :: JSON+null :: Literal null =-  JSON (inline E.null)+  Literal (inline E.null)  -- | -- JSON Boolean literal from 'Bool'. {-# INLINE boolean #-}-boolean :: Bool -> JSON+boolean :: Bool -> Literal boolean =-  JSON . inline E.boolean+  Literal . inline E.boolean  -- | -- JSON Number literal from 'Int'. {-# INLINE number_int #-}-number_int :: Int -> JSON+number_int :: Int -> Literal number_int =-  JSON . inline A.intDec+  Literal . inline A.intDec  -- | -- JSON Number literal from 'Integer'. {-# INLINE number_integer #-}-number_integer :: Integer -> JSON+number_integer :: Integer -> Literal number_integer =-  JSON . inline A.integerDec+  Literal . inline A.integerDec  -- | -- JSON Number literal from 'Double'. {-# INLINE number_double #-}-number_double :: Double -> JSON+number_double :: Double -> Literal number_double =-  JSON . inline A.doubleDec+  Literal . inline A.doubleDec  -- | -- JSON Number literal from 'Scientific'. {-# INLINE number_scientific #-}-number_scientific :: Scientific -> JSON+number_scientific :: Scientific -> Literal number_scientific =-  JSON . inline E.scientific+  Literal . inline E.scientific  -- | -- JSON String literal from 'Text'. {-# INLINE string #-}-string :: Text -> JSON+string :: Text -> Literal string =-  JSON . inline E.string+  Literal . inline E.string  -- |--- JSON Object literal from the 'Object' builder.+-- JSON Object literal from the 'Rows' builder. {-# INLINE object #-}-object :: Object -> JSON-object (Object x) =-  JSON (maybe E.emptyObject (inline E.inCurlies) x)+object :: Rows -> Literal+object (Rows x) =+  Literal (maybe E.emptyObject (inline E.inCurlies) x)  -- |--- JSON Array literal from the 'Array' builder.+-- JSON Array literal from the 'Elements' builder. {-# INLINE array #-}-array :: Array -> JSON-array (Array x) =-  JSON (maybe E.emptyArray (inline E.inSquarelies) x)+array :: Elements -> Literal+array (Elements x) =+  Literal (maybe E.emptyArray (inline E.inSquarelies) x)  -- |--- Object builder from a key-value pair,+-- Rows builder from a key-value pair, -- where value is an already encoded JSON literal. -- --- Use the 'Object' 'Monoid' instance+-- Use the 'Rows' 'Monoid' instance -- to construct multi-row objects. {-# INLINE row #-}-row :: Text -> JSON -> Object-row key (JSON value) =-  Object (Just (inline E.row key value))+row :: Text -> Literal -> Rows+row key (Literal literal) =+  Rows (Just (inline E.row key literal))  -- |--- Array builder from an element,+-- Elements builder from an element, -- which is an already encoded JSON literal. -- --- Use the 'Array' 'Monoid' instance+-- Use the 'Elements' 'Monoid' instance -- to construct multi-element arrays. {-# INLINE element #-}-element :: JSON -> Array-element (JSON value) =-  Array (Just value)+element :: Literal -> Elements+element (Literal literal) =+  Elements (Just literal) 
library/JSONBytesBuilder/Interpreters/ByteString.hs view
@@ -1,6 +1,6 @@ module JSONBytesBuilder.Interpreters.ByteString (-  compactJSON,+  jsonLiteral, ) where @@ -11,8 +11,8 @@   -- |--- Produce a strict JSON ByteString with compact syntax-{-# INLINE compactJSON #-}-compactJSON :: JSON -> ByteString-compactJSON =-  B.toStrict . A.compactJSON+-- Produce a strict JSON ByteString with compact syntax from a literal builder.+{-# INLINE jsonLiteral #-}+jsonLiteral :: Literal -> ByteString+jsonLiteral =+  B.toStrict . A.jsonLiteral
library/JSONBytesBuilder/Interpreters/ByteStringBuilder.hs view
@@ -1,6 +1,6 @@ module JSONBytesBuilder.Interpreters.ByteStringBuilder (-  compactJSON,+  jsonLiteral, ) where @@ -10,8 +10,8 @@   -- |--- Produce a JSON ByteString builder with compact syntax-{-# INLINE compactJSON #-}-compactJSON :: JSON -> Builder-compactJSON =+-- Produce a JSON ByteString builder with compact syntax from a literal builder.+{-# INLINE jsonLiteral #-}+jsonLiteral :: Literal -> Builder+jsonLiteral =   unsafeCoerce
library/JSONBytesBuilder/Interpreters/LazyByteString.hs view
@@ -1,6 +1,6 @@ module JSONBytesBuilder.Interpreters.LazyByteString (-  compactJSON,+  jsonLiteral, ) where @@ -12,8 +12,8 @@   -- |--- Produce a lazy JSON ByteString with compact syntax-{-# INLINE compactJSON #-}-compactJSON :: JSON -> B.ByteString-compactJSON =-  toLazyByteString . A.compactJSON+-- Produce a lazy JSON ByteString with compact syntax from a literal builder.+{-# INLINE jsonLiteral #-}+jsonLiteral :: Literal -> B.ByteString+jsonLiteral =+  toLazyByteString . A.jsonLiteral