json-bytes-builder 0.4 → 0.5
raw patch · 5 files changed
+71/−30 lines, 5 files
Files
- demo/Main.hs +2/−2
- json-bytes-builder.cabal +1/−1
- library/JSONBytesBuilder/Builder.hs +8/−5
- library/JSONBytesBuilder/Private/Builder.hs +36/−17
- library/JSONBytesBuilder/Private/ByteString/Builder.hs +24/−5
demo/Main.hs view
@@ -34,7 +34,7 @@ A.object rows where rows =- A.row "name" (A.string name) <>+ A.row "name" (A.stringFromText name) <> A.row "genres" (A.array genresElements) where genresElements =@@ -45,7 +45,7 @@ A.object rows where rows =- A.row "name" (A.string name)+ A.row "name" (A.stringFromText name) metallica :: A.Literal metallica =
json-bytes-builder.cabal view
@@ -1,7 +1,7 @@ name: json-bytes-builder version:- 0.4+ 0.5 synopsis: Direct-to-bytes JSON Builder description:
library/JSONBytesBuilder/Builder.hs view
@@ -6,11 +6,14 @@ Literal, null, boolean,- number_int,- number_integer,- number_double,- number_scientific,- string,+ numberFromInt,+ numberFromInteger,+ numberFromDouble,+ numberFromScientific,+ stringFromText,+ stringFromLazyText,+ stringFromBytes,+ stringFromLazyBytes, object, array, -- ** Rows builders
library/JSONBytesBuilder/Private/Builder.hs view
@@ -3,6 +3,8 @@ import JSONBytesBuilder.Private.Prelude hiding (null) import qualified Data.ByteString.Builder as A+import qualified Data.Text.Lazy as C+import qualified Data.ByteString.Lazy as D import qualified JSONBytesBuilder.Private.ByteString.Builder as E @@ -69,38 +71,55 @@ -- | -- JSON Number literal from 'Int'.-{-# INLINE number_int #-}-number_int :: Int -> Literal-number_int =+{-# INLINE numberFromInt #-}+numberFromInt :: Int -> Literal+numberFromInt = Literal . inline A.intDec -- | -- JSON Number literal from 'Integer'.-{-# INLINE number_integer #-}-number_integer :: Integer -> Literal-number_integer =+{-# INLINE numberFromInteger #-}+numberFromInteger :: Integer -> Literal+numberFromInteger = Literal . inline A.integerDec -- | -- JSON Number literal from 'Double'.-{-# INLINE number_double #-}-number_double :: Double -> Literal-number_double =+{-# INLINE numberFromDouble #-}+numberFromDouble :: Double -> Literal+numberFromDouble = Literal . inline A.doubleDec -- | -- JSON Number literal from 'Scientific'.-{-# INLINE number_scientific #-}-number_scientific :: Scientific -> Literal-number_scientific =+{-# INLINE numberFromScientific #-}+numberFromScientific :: Scientific -> Literal+numberFromScientific = Literal . inline E.scientific -- |--- JSON String literal from 'Text'.-{-# INLINE string #-}-string :: Text -> Literal-string =- Literal . inline E.string+-- JSON String literal from 'Text' encoded using UTF8.+{-# INLINE stringFromText #-}+stringFromText :: Text -> Literal+stringFromText =+ Literal . inline E.stringFromText++-- |+-- JSON String literal from lazy Text encoded using UTF8.+{-# INLINE stringFromLazyText #-}+stringFromLazyText :: C.Text -> Literal+stringFromLazyText =+ Literal . inline E.stringFromLazyText++{-# INLINE stringFromBytes #-}+stringFromBytes :: ByteString -> Literal+stringFromBytes =+ Literal . inline E.stringFromBytes++{-# INLINE stringFromLazyBytes #-}+stringFromLazyBytes :: D.ByteString -> Literal+stringFromLazyBytes =+ Literal . inline E.stringFromLazyBytes -- | -- JSON Object literal from the 'Rows' builder.
library/JSONBytesBuilder/Private/ByteString/Builder.hs view
@@ -5,9 +5,13 @@ import Data.ByteString.Builder import qualified JSONBytesBuilder.Private.ByteString.BoundedPrim as A import qualified Data.ByteString.Builder.Prim as A+import qualified Data.ByteString.Builder.Scientific as D+import qualified Data.ByteString as E+import qualified Data.ByteString.Lazy as F import qualified Data.Text.Encoding as B+import qualified Data.Text.Lazy as G+import qualified Data.Text.Lazy.Encoding as H import qualified Data.Scientific as C-import qualified Data.ByteString.Builder.Scientific as D {-# INLINABLE null #-}@@ -20,11 +24,26 @@ boolean = A.primBounded A.boolean -{-# INLINABLE string #-}-string :: Text -> Builder-string x =+{-# INLINABLE stringFromText #-}+stringFromText :: Text -> Builder+stringFromText x = char8 '"' <> B.encodeUtf8BuilderEscaped A.stringEncodedByte x <> char8 '"' +{-# INLINABLE stringFromLazyText #-}+stringFromLazyText :: G.Text -> Builder+stringFromLazyText x =+ char8 '"' <> H.encodeUtf8BuilderEscaped A.stringEncodedByte x <> char8 '"'++{-# INLINABLE stringFromBytes #-}+stringFromBytes :: ByteString -> Builder+stringFromBytes x =+ char8 '"' <> A.primMapByteStringBounded (inline A.stringEncodedByte) x <> char8 '"'++{-# INLINABLE stringFromLazyBytes #-}+stringFromLazyBytes :: F.ByteString -> Builder+stringFromLazyBytes x =+ char8 '"' <> A.primMapLazyByteStringBounded (inline A.stringEncodedByte) x <> char8 '"'+ {-# INLINABLE scientific #-} scientific :: Scientific -> Builder scientific n =@@ -43,7 +62,7 @@ {-# INLINABLE row #-} row :: Text -> Builder -> Builder row key value =- string key <> char8 ':' <> value+ stringFromText key <> char8 ':' <> value {-# INLINABLE inSquarelies #-} inSquarelies :: Builder -> Builder