@@ -22,6 +22,11 @@ module Json
22
22
, decode
23
23
, decodeNewlineDelimited
24
24
, encode
25
+ , toChunks
26
+ , toShortText
27
+ , toText
28
+ , toBytes
29
+ , toByteArray
25
30
-- * Infix Synonyms
26
31
, pattern (:->)
27
32
-- * Constants
@@ -73,7 +78,7 @@ import Data.Bytes.Parser (Parser)
73
78
import Data.Bytes.Types (Bytes (.. ))
74
79
import Data.Char (ord )
75
80
import Data.Number.Scientific (Scientific )
76
- import Data.Primitive (ByteArray ,MutableByteArray ,SmallArray ,Array ,PrimArray ,Prim )
81
+ import Data.Primitive (ByteArray ( ByteArray ) ,MutableByteArray ,SmallArray ,Array ,PrimArray ,Prim )
77
82
import Data.Text.Short (ShortText )
78
83
import GHC.Exts (Char (C #),Int (I #),gtWord #,ltWord #,word2Int #,chr #)
79
84
import GHC.Word (Word8 ,Word16 ,Word32 ,Word64 )
@@ -82,10 +87,12 @@ import Data.Text (Text)
82
87
import Data.Foldable (foldlM )
83
88
import Control.Monad.Trans.Except (runExceptT ,except )
84
89
import Control.Monad.Trans.Class (lift )
90
+ import Data.Bytes.Chunks (Chunks )
85
91
86
92
import qualified Prelude
87
93
import qualified Data.Builder.ST as B
88
94
import qualified Data.Bytes as Bytes
95
+ import qualified Data.Bytes.Chunks as ByteChunks
89
96
import qualified Data.Bytes.Builder as BLDR
90
97
import qualified Data.Bytes.Parser as P
91
98
import qualified Data.Chunks as Chunks
@@ -229,6 +236,27 @@ decodeNewlineDelimited !everything =
229
236
dst' <- lift $ PM. unsafeFreezeSmallArray dst
230
237
pure dst'
231
238
239
+ toChunks :: Value -> Chunks
240
+ {-# inline toChunks #-}
241
+ toChunks = BLDR. run 512 . encode
242
+
243
+ toBytes :: Value -> Bytes
244
+ {-# inline toBytes #-}
245
+ toBytes = ByteChunks. concat . toChunks
246
+
247
+ toByteArray :: Value -> ByteArray
248
+ {-# inline toByteArray #-}
249
+ toByteArray = ByteChunks. concatU . toChunks
250
+
251
+ toShortText :: Value -> ShortText
252
+ {-# inline toShortText #-}
253
+ toShortText v = case toByteArray v of
254
+ ByteArray x -> TS. fromShortByteStringUnsafe (BSS. SBS x)
255
+
256
+ toText :: Value -> Text
257
+ {-# inline toText #-}
258
+ toText = TS. toText . toShortText
259
+
232
260
-- | Encode a JSON syntax tree.
233
261
encode :: Value -> BLDR. Builder
234
262
{-# noinline encode #-}
0 commit comments