@@ -49,36 +49,30 @@ do
4949
5050### Parse UTF8
5151
52−Parse a `String` as UTF8 with a length prefix in a
53−way that's compatible with the
54−[`Binary.Put.putStringUtf8`](https://hackage.haskell.org/package/binary/docs/Data-Binary-Put.html#v:putStringUtf8)
55−function from the Haskell
56−[__binary__](https://hackage.haskell.org/package/binary)
57−library.
52+Parse a `String` as UTF8 with a length prefix.
5853
5954We give this as an example, rather than supporting it in the library, because
6055it depends on
6156[`Data.TextDecoding.decodeUtf8`](https://pursuit.purescript.org/packages/purescript-text-encoding/docs/Data.TextDecoding#v:decodeUtf8).
6257
6358```purescript
59+mkTypedArray :: Data.ArrayBuffer.Types.DataView -> Effect Data.ArrayBuffer.Types.Uint8Array
60+mkTypedArray dv = do
61+ let buffer = Data.ArrayBuffer.DataView.buffer dv
62+ byteOffset = Data.ArrayBuffer.DataView.byteOffset dv
63+ byteLength = Data.ArrayBuffer.DataView.byteLength dv
64+ Data.ArrayBuffer.Typed.part buffer byteOffset byteLength
65+
6466do
6567 result <- Text.Parsing.Parser.runParserT dataview $ do
66− -- Parse 32 bits of the big-endian 64-bit length prefix.
67− _ <- anyUint32be
68+ -- Parse a 32-bit big-endian length prefix for the length of the utf8 string,
69+ -- in bytes.
6870 length <- anyUint32be
6971 stringview <- takeN $ UInt.toInt length
7072 stringarray <- liftEffect $ mkTypedArray stringview
7173 case Data.TextDecoding.decodeUtf8 stringarray of
7274 Left err -> Data.Parsing.Parser.fail $ show err
7375 Right s -> pure s
74−
75−where
76− mkTypedArray :: Data.ArrayBuffer.Types.DataView -> Effect Data.ArrayBuffer.Types.Uint8Array
77− mkTypedArray dv = do
78− let buffer = Data.ArrayBuffer.DataView.buffer dv
79− byteOffset = Data.ArrayBuffer.DataView.byteOffset dv
80− byteLength = Data.ArrayBuffer.DataView.byteLength dv
81− Data.ArrayBuffer.Typed.part buffer byteOffset byteLength
8276```
8377
8478## Serialization