@@ -22,6 +22,11 @@ module Json
2222 , decode
2323 , decodeNewlineDelimited
2424 , encode
25+ , toChunks
26+ , toShortText
27+ , toText
28+ , toBytes
29+ , toByteArray
2530 -- * Infix Synonyms
2631 , pattern (:->)
2732 -- * Constants
@@ -73,7 +78,7 @@ import Data.Bytes.Parser (Parser)
7378import Data.Bytes.Types (Bytes (.. ))
7479import Data.Char (ord )
7580import 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 )
7782import Data.Text.Short (ShortText )
7883import GHC.Exts (Char (C #),Int (I #),gtWord #,ltWord #,word2Int #,chr #)
7984import GHC.Word (Word8 ,Word16 ,Word32 ,Word64 )
@@ -82,10 +87,12 @@ import Data.Text (Text)
8287import Data.Foldable (foldlM )
8388import Control.Monad.Trans.Except (runExceptT ,except )
8489import Control.Monad.Trans.Class (lift )
90+ import Data.Bytes.Chunks (Chunks )
8591
8692import qualified Prelude
8793import qualified Data.Builder.ST as B
8894import qualified Data.Bytes as Bytes
95+ import qualified Data.Bytes.Chunks as ByteChunks
8996import qualified Data.Bytes.Builder as BLDR
9097import qualified Data.Bytes.Parser as P
9198import qualified Data.Chunks as Chunks
@@ -229,6 +236,27 @@ decodeNewlineDelimited !everything =
229236 dst' <- lift $ PM. unsafeFreezeSmallArray dst
230237 pure dst'
231238
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+
232260-- | Encode a JSON syntax tree.
233261encode :: Value -> BLDR. Builder
234262{-# noinline encode #-}
0 commit comments