53 lines
1.6 KiB
Plaintext
53 lines
1.6 KiB
Plaintext
module Node.Stream.CBOR.Decode where
|
|
|
|
import Prelude hiding (join)
|
|
|
|
import Data.Nullable (Nullable)
|
|
import Effect (Effect)
|
|
import Effect.Uncurried (mkEffectFn1)
|
|
import Foreign (Foreign)
|
|
import Foreign.Object (Object)
|
|
import Node.Buffer (Buffer)
|
|
import Node.EventEmitter (EventHandle(..))
|
|
import Node.EventEmitter.UtilTypes (EventHandle1)
|
|
import Node.Stream (Read, Stream, Write)
|
|
import Node.Stream.CBOR.Options (F32, Options, prepareOptions)
|
|
import Node.Stream.Object (Transform) as Object
|
|
import Prim.Row (class Nub, class Union)
|
|
import Unsafe.Coerce (unsafeCoerce)
|
|
|
|
data CBORDecode
|
|
|
|
-- | CBOR decoding transform stream
|
|
-- |
|
|
-- | Accepts unencoded `Buffer` chunks, and transforms them
|
|
-- | to JS values.
|
|
type CBORDecoder :: Row Type -> Type
|
|
type CBORDecoder r = Stream (read :: Read, write :: Write, cbor :: CBORDecode | r)
|
|
|
|
make
|
|
:: forall r missing extra minimal minimalExtra
|
|
. Union r missing (Options extra)
|
|
=> Union r (useFloat32 :: F32) minimal
|
|
=> Nub minimal (useFloat32 :: F32 | minimalExtra)
|
|
=> { | r }
|
|
-> Effect (CBORDecoder ())
|
|
make = makeImpl <<< prepareOptions @r @missing
|
|
|
|
toObjectStream :: forall r. CBORDecoder r -> Object.Transform Buffer Foreign
|
|
toObjectStream = unsafeCoerce
|
|
|
|
-- | `data` event. Emitted when a CSV record has been parsed.
|
|
dataH :: forall a. EventHandle1 (CBORDecoder a) Foreign
|
|
dataH = EventHandle "data" mkEffectFn1
|
|
|
|
-- | FFI
|
|
foreign import makeImpl :: forall r. Foreign -> Effect (Stream r)
|
|
|
|
-- | FFI
|
|
foreign import readImpl :: forall r. Stream r -> Effect (Nullable Foreign)
|
|
|
|
-- | FFI
|
|
recordToForeign :: forall r. Record r -> Object Foreign
|
|
recordToForeign = unsafeCoerce
|