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.Text.Encoding as B
import qualified Data.Scientific as C
import qualified Data.ByteString.Builder.Scientific as D
null :: Builder
null =
A.primBounded A.null ()
boolean :: Bool -> Builder
boolean =
A.primBounded A.boolean
string :: Text -> Builder
string x =
char8 '"' <> B.encodeUtf8BuilderEscaped 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 =
string 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 ()