0 | module Node.Stream.Writeable
  1 |
  2 | import Data.Maybe
  3 | import Node.Event.Internal
  4 | import Node.Stream.Readable
  5 |
  6 | %foreign nodeOn0 "close"
  7 | ffi_onClose : a -> PrimIO () -> PrimIO ()
  8 |
  9 | export
 10 | unsafeWriteableOnClose : HasIO io => a -> IO () -> io ()
 11 | unsafeWriteableOnClose = on0 ffi_onClose
 12 |
 13 | %foreign nodeOn0 "drain"
 14 | ffi_onDrain : a -> PrimIO () -> PrimIO ()
 15 |
 16 | export
 17 | unsafeWriteableOnDrain : HasIO io => a -> IO () -> io ()
 18 | unsafeWriteableOnDrain = on0 ffi_onDrain
 19 |
 20 | %foreign nodeOn1 "error"
 21 | ffi_onError : a -> (e -> PrimIO ()) -> PrimIO ()
 22 |
 23 | export
 24 | unsafeWriteableOnError : HasIO io => a -> (e -> IO ()) -> io ()
 25 | unsafeWriteableOnError = on1 ffi_onError
 26 |
 27 | %foreign nodeOn0 "finish"
 28 | ffi_onFinish : a -> PrimIO () -> PrimIO ()
 29 |
 30 | export
 31 | unsafeWriteableOnFinish : HasIO io => a -> IO () -> io ()
 32 | unsafeWriteableOnFinish = on0 ffi_onFinish
 33 |
 34 | %foreign nodeOn1 "pipe"
 35 | ffi_onPipe : a -> (r -> PrimIO ()) -> PrimIO ()
 36 |
 37 | export
 38 | unsafeWriteableOnPipe : HasIO io => ReadableClass d e r => a -> (r -> IO ()) -> io ()
 39 | unsafeWriteableOnPipe = on1 ffi_onPipe
 40 |
 41 | %foreign nodeOn1 "unpipe"
 42 | ffi_onUnpipe : a -> (r -> PrimIO ()) -> PrimIO ()
 43 |
 44 | export
 45 | unsafeWriteableOnUnpipe : HasIO io => ReadableClass d e r => a -> (r -> IO ()) -> io ()
 46 | unsafeWriteableOnUnpipe = on1 ffi_onUnpipe
 47 |
 48 | %foreign "node:lambda: (tya, writeable) => writeable.cork()"
 49 | ffi_cork : a -> PrimIO ()
 50 |
 51 | export
 52 | unsafeWriteableCork : HasIO io => a -> io ()
 53 | unsafeWriteableCork a = primIO $ ffi_cork a
 54 |
 55 | %foreign "node:lambda: (tya, writeable, callback) => writeable.end(callback)"
 56 | ffi_end : a -> PrimIO () -> PrimIO ()
 57 |
 58 | export
 59 | unsafeWriteableEnd : HasIO io => a -> IO () -> io ()
 60 | unsafeWriteableEnd = on0 ffi_end
 61 |
 62 | %foreign "node:lambda: (tya, tyb, writeable, data, callback) => writeable.write(data, callback)"
 63 | ffi_write : a -> b -> PrimIO () -> PrimIO ()
 64 |
 65 | export
 66 | unsafeWriteableWrite : HasIO io => a -> b -> IO () -> io ()
 67 | unsafeWriteableWrite a b cb = primIO $ ffi_write a b $ toPrim cb
 68 |
 69 | %foreign "node:lambda: (tya, writeable) => writeable.uncork()"
 70 | ffi_uncork : a -> PrimIO ()
 71 |
 72 | export
 73 | unsafeWriteableUncork : HasIO io => a -> io ()
 74 | unsafeWriteableUncork a = primIO $ ffi_uncork a
 75 |
 76 | ||| Writable stream
 77 | public export
 78 | interface WriteableClass d e w | w where
 79 |   (.onClose) : HasIO io => w -> IO () -> io ()
 80 |   (.onClose) = unsafeWriteableOnClose
 81 |   (.onDrain) : HasIO io => w -> IO () -> io ()
 82 |   (.onDrain) = unsafeWriteableOnDrain
 83 |   (.onError) : HasIO io => w -> (e -> IO ()) -> io ()
 84 |   (.onError) = unsafeWriteableOnError
 85 |   (.onFinish) : HasIO io => w -> IO () -> io ()
 86 |   (.onFinish) = unsafeWriteableOnFinish
 87 |   (.onPipe) : HasIO io => ReadableClass d e r => w -> (r -> IO ()) -> io ()
 88 |   (.onPipe) = unsafeWriteableOnPipe
 89 |   (.onUnpipe) : HasIO io => ReadableClass d e r => w -> (r -> IO ()) -> io ()
 90 |   (.onUnpipe) = unsafeWriteableOnUnpipe
 91 |   (.cork) : HasIO io => w -> io ()
 92 |   (.cork) = unsafeWriteableCork
 93 |   (.end) : HasIO io => w -> Maybe (IO ()) -> io ()
 94 |   (.end) w cb = unsafeWriteableEnd w $ fromMaybe (pure ()) cb
 95 |   (.write) : HasIO io => w -> d -> Maybe (IO ()) -> io ()
 96 |   (.write) w d cb = unsafeWriteableWrite w d $ fromMaybe (pure ()) cb
 97 |   (.uncork) : HasIO io => w -> io ()
 98 |   (.uncork) = unsafeWriteableUncork
 99 |
100 |