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 +4/−4
- json-bytes-builder.cabal +2/−2
- library/JSONBytesBuilder/Builder.hs +61/−61
- library/JSONBytesBuilder/Interpreters/ByteString.hs +6/−6
- library/JSONBytesBuilder/Interpreters/ByteStringBuilder.hs +5/−5
- library/JSONBytesBuilder/Interpreters/LazyByteString.hs +6/−6
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