Skip to content

Commit 135c070

Browse files
committed
Add various function for encoding to things other than builder
1 parent 51de0e8 commit 135c070

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# Revision history for json-syntax
22

3-
## 0.2.7.0 -- 2023-??-??
3+
## 0.2.7.0 -- 2023-10-05
44

55
* Add `decodeNewlineDelimited`.
6+
* Add `toChunks`, `toBytes`, `toText`, `toShortText`, `toByteArray`.
67

78
## 0.2.6.1 -- 2023-07-28
89

json-syntax.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ library
4343
, primitive >=0.7 && <0.10
4444
, run-st >=0.1.1 && <0.2
4545
, scientific-notation >=0.1.6 && <0.2
46-
, text >=1.2
46+
, text >=2.0
4747
, text-short >=0.1.3 && <0.2
4848
, transformers >=0.5.6.2
4949
, word-compat >=0.0.3

src/Json.hs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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)
7378
import Data.Bytes.Types (Bytes(..))
7479
import Data.Char (ord)
7580
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)
7782
import Data.Text.Short (ShortText)
7883
import GHC.Exts (Char(C#),Int(I#),gtWord#,ltWord#,word2Int#,chr#)
7984
import GHC.Word (Word8,Word16,Word32,Word64)
@@ -82,10 +87,12 @@ import Data.Text (Text)
8287
import Data.Foldable (foldlM)
8388
import Control.Monad.Trans.Except (runExceptT,except)
8489
import Control.Monad.Trans.Class (lift)
90+
import Data.Bytes.Chunks (Chunks)
8591

8692
import qualified Prelude
8793
import qualified Data.Builder.ST as B
8894
import qualified Data.Bytes as Bytes
95+
import qualified Data.Bytes.Chunks as ByteChunks
8996
import qualified Data.Bytes.Builder as BLDR
9097
import qualified Data.Bytes.Parser as P
9198
import 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.
233261
encode :: Value -> BLDR.Builder
234262
{-# noinline encode #-}

0 commit comments

Comments
 (0)