git.iko.soy/rowtype-yoga/purescript-parsing-dataview
on master help sign in
README improvements
commit2310bbaea60870792eec33c5882e7fec10927c84 authorJames Brock <jamesbrock@gmail.com> dateWed 21 Jul 2021, 20:28 (5 years ago) parent8b615d1
1 file changed+26−20
README.md+26−20
README.md+26−20
@@ -27,8 +27,11 @@ Parse values out of a `dataview :: Data.ArrayBuffer.Types.DataView`. All
2727Parse two big-endian IEEE 754 double-precision floats.
2828
2929```purescript
30+import Text.Parsing.Parser (runParserT)
31+import Text.Parsing.Parser.DataView (anyFloat64be)
32+
3033do
31− result <- Text.Parsing.Parser.runParserT dataview $ do
34+ result <- runParserT dataview $ do
3235 float1 <- anyFloat64be
3336 float2 <- anyFloat64be
3437 pure $ Tuple float1 float2
@@ -39,8 +42,12 @@ do
3942Parse an array of `n` 32-bit signed integers.
4043
4144```purescript
45+import Text.Parsing.Parser (runParserT)
46+import Text.Parsing.Parser.DataView (anyUint32be)
47+import Data.Unfoldable (replicateA)
48+
4249do
43− result <- Text.Parsing.Parser.runParserT dataview $ replicateA n anyInt32be
50+ result <- runParserT dataview $ replicateA n anyInt32be
4451```
4552
4653### Parse UTF8
@@ -52,25 +59,29 @@ it depends on
5259[`Data.TextDecoding.decodeUtf8`](https://pursuit.purescript.org/packages/purescript-text-encoding/docs/Data.TextDecoding#v:decodeUtf8).
5360
5461```purescript
55−import Effect (Effect, liftEffect)
5662import Control.Monad.Trans.Class (lift)
63+import Data.ArrayBuffer.Types (DataView, Uint8Array)
64+import Data.ArrayBuffer.DataView (buffer, byteOffset, byteLength)
65+import Data.ArrayBuffer.Typed (part)
66+import Effect (Effect, liftEffect)
67+import Text.Parsing.Parser (runParserT, fail)
68+import Text.Parsing.Parser.DataView (anyUint32be, takeN)
69+import Data.UInt (toInt)
70+import Data.Text.Decoding (decodeUtf8)
71+
5772
58−mkTypedArray :: Data.ArrayBuffer.Types.DataView -> Effect Data.ArrayBuffer.Types.Uint8Array
59−mkTypedArray dv = do
60− let buffer = Data.ArrayBuffer.DataView.buffer dv
61− byteOffset = Data.ArrayBuffer.DataView.byteOffset dv
62− byteLength = Data.ArrayBuffer.DataView.byteLength dv
63− Data.ArrayBuffer.Typed.part buffer byteOffset byteLength
73+mkUint8Array :: DataView -> Effect Uint8Array
74+mkUint8Array dv = part (buffer dv) (byteOffset dv) (byteLength dv)
6475
6576do
66− result <- Text.Parsing.Parser.runParserT dataview $ do
77+ result <- runParserT dataview $ do
6778 -- Parse a 32-bit big-endian length prefix for the length of the utf8 string,
6879 -- in bytes.
6980 length <- anyUint32be
70− stringview <- takeN $ UInt.toInt length
71− stringarray <- lift $ liftEffect $ mkTypedArray stringview
72− case Data.TextDecoding.decodeUtf8 stringarray of
73− Left err -> Data.Parsing.Parser.fail $ show err
81+ stringview <- takeN $ toInt length
82+ stringarray <- lift $ liftEffect $ mkUint8Array stringview
83+ case decodeUtf8 stringarray of
84+ Left err -> fail $ show err
7485 Right s -> pure s
7586```
7687
@@ -78,7 +89,7 @@ do
7889
7990This package is for reading (`DataView`s on) `ArrayBuffer`s, not writing
8091them. See the package
81−[__purescript-arraybuffer-builder__](https://pursuit.purescript.org/packages/purescript-arraybuffer-builder/)
92+[__arraybuffer-builder__](https://pursuit.purescript.org/packages/purescript-arraybuffer-builder/)
8293for a way to
8394serialize and build `ArrayBuffer`s.
8495
@@ -88,8 +99,3 @@ serialize and build `ArrayBuffer`s.
8899* [MDN `ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)
89100* [MDN `DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView)
90101
91−## Notes
92−
93−Perhaps some day this package can be
94−[merged into __purescript-parsing__](https://github.com/purescript-contrib/purescript-parsing/issues/88),
95−but for now it has too many non-*purescript-contrib* dependencies.