module JSONBytesBuilder.Private.ByteString.Builder
where
import JSONBytesBuilder.Private.Prelude hiding (length, null)
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
null :: Builder
null =
A.primBounded A.null ()
boolean :: Bool -> Builder
boolean =
A.primBounded A.boolean
stringFromText :: Text -> Builder
stringFromText x =
char8 '"' <> B.encodeUtf8BuilderEscaped A.stringEncodedByte x <> char8 '"'
stringFromLazyText :: G.Text -> Builder
stringFromLazyText x =
char8 '"' <> H.encodeUtf8BuilderEscaped A.stringEncodedByte x <> char8 '"'
stringFromBytes :: ByteString -> Builder
stringFromBytes x =
char8 '"' <> A.primMapByteStringBounded (inline A.stringEncodedByte) x <> char8 '"'
stringFromLazyBytes :: F.ByteString -> Builder
stringFromLazyBytes x =
char8 '"' <> A.primMapLazyByteStringBounded (inline A.stringEncodedByte) x <> char8 '"'
scientific :: Scientific -> Builder
scientific n =
if e < 0
then D.scientificBuilder n
else integerDec (C.coefficient n * 10 ^ e)
where
e =
C.base10Exponent n
inCurlies :: Builder -> Builder
inCurlies x =
char8 '{' <> x <> char8 '}'
row :: Text -> Builder -> Builder
row key value =
stringFromText key <> char8 ':' <> value
inSquarelies :: Builder -> Builder
inSquarelies x =
char8 '[' <> x <> char8 ']'
commaSeparated :: Builder -> Builder -> Builder
commaSeparated left right =
left <> char8 ',' <> right
emptyObject :: Builder
emptyObject =
A.primBounded A.emptyObject ()
emptyArray :: Builder
emptyArray =
A.primBounded A.emptyArray ()