bend-kit-stream Releases (6): 0.3.1.0 0xd69d0935f61b6b857f19d03d9f46fddc indexed https://jend.leeeet.dev/files.txt?path=bend-kit-stream@0.3.1.0 0.3.0.0 0x8338b7df8e858de1d2d771d98f79add5 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-stream@0.3.0.0 0.2.0.1 0xe6fabfab2664455db7f9fe3e8a545b77 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-stream@0.2.0.1 0.2.0.0 0xfd5835adf423bce2b49e1ed92b0a030e unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-stream@0.2.0.0 0.1.0.1 0x6eaf476c39756d18630510c519770168 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-stream@0.1.0.1 0.1.0.0 0x5d1df91c572021ceb1e6a56e51680028 unindexed https://jend.leeeet.dev/files.txt?path=bend-kit-stream@0.1.0.0 Definitions (22): Stream.Error (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=Error) type Error is Data: BadChunk{} Limit{} Read{code: U32, message: String} Write{code: U32, message: String} Stream.Outcome (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=Outcome) type Outcome is Data: Complete{count: U32} Failed{count: U32, error: Error} Stream.ReadAction (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=ReadAction) # Internal pure decisions, separated from the trusted effects. type ReadAction is Data: End{} Over{} Forward{} Stream.chunk.valid (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=chunk.valid) def chunk.valid(+chunk: U32) -> Bool: Stream.request (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=request) # The one-byte probe is only requested after the entire cap was forwarded. def request(+chunk: U32, +remaining: U32) -> U32: Stream.read.action.flags (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=read.action.flags) def read.action.flags(zero: Bool, probe: Bool) -> ReadAction: Stream.read.action (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=read.action) def read.action(len: U32, remaining: U32) -> ReadAction: Stream.Transfer (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=Transfer) type Transfer<-S: Type, -D: Type> is Type: More{source: S, destination: D, count: U32} Stop{source: S, destination: D, outcome: Outcome} Stream.file.read (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=file.read) def file.read(source: File, max: U32, tls: Bool, ms: U32) -> IO(File & Result<&1, &1, U32 & String, U32 & Array>): Stream.file.write (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=file.write) def file.write(destination: File, len: U32, words: Array, tls: Bool) -> IO(File & Result<&1, &1, U32 & String, Unit>): Stream.socket.read.tls (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=socket.read.tls) def socket.read.tls(tls: Bool, source: Socket, max: U32, ms: U32) -> IO(Socket & Result<&1, &1, U32 & String, U32 & Array>): Stream.socket.read (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=socket.read) def socket.read(source: Socket, max: U32, tls: Bool, ms: U32) -> IO(Socket & Result<&1, &1, U32 & String, U32 & Array>): Stream.socket.write.tls (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=socket.write.tls) def socket.write.tls(tls: Bool, destination: Socket, len: U32, words: Array) -> IO(Socket & Result<&1, &1, U32 & String, Unit>): Stream.socket.write (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=socket.write) def socket.write(destination: Socket, len: U32, words: Array, tls: Bool) -> IO(Socket & Result<&1, &1, U32 & String, Unit>): Stream.transfer.written (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=transfer.written) def transfer.written(~S: Type, ~D: Type, source: S, count: U32, len: U32, pair: D & Result<&1, &1, U32 & String, Unit>) -> Transfer: Stream.transfer.action (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=transfer.action) def transfer.action(~S: Type, ~D: Type, ~write: D -> U32 -> Array -> Bool -> IO(D & Result<&1, &1, U32 & String, Unit>), action: ReadAction, source: S, destination: D, count: U32, +len: U32, words: Array, tls: Bool) -> IO(Transfer): Stream.transfer.read (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=transfer.read) def transfer.read(~S: Type, ~D: Type, ~write: D -> U32 -> Array -> Bool -> IO(D & Result<&1, &1, U32 & String, Unit>), pair: S & Result<&1, &1, U32 & String, U32 & Array>, destination: D, count: U32, remaining: U32, tls: Bool) -> IO(Transfer): Stream.transfer.loop (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=transfer.loop) # cap+1 reads suffice even if every successful nonempty read contains one byte. # Fuel is first among runtime parameters; no fixed read ceiling or unsafe recursion. def transfer.loop(~S: Type, ~D: Type, ~read: S -> U32 -> Bool -> U32 -> IO(S & Result<&1, &1, U32 & String, U32 & Array>), ~write: D -> U32 -> Array -> Bool -> IO(D & Result<&1, &1, U32 & String, Unit>), fuel: Nat, state: Transfer, +tls: Bool, +chunk: U32, +cap: U32, +ms: U32) -> IO(S & D & Outcome): Stream.transfer.start (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=transfer.start) def transfer.start(~S: Type, ~D: Type, ~read: S -> U32 -> Bool -> U32 -> IO(S & Result<&1, &1, U32 & String, U32 & Array>), ~write: D -> U32 -> Array -> Bool -> IO(D & Result<&1, &1, U32 & String, Unit>), valid: Bool, source: S, destination: D, tls: Bool, chunk: U32, +cap: U32, ms: U32) -> IO(S & D & Outcome): Stream.file.file (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=file.file) # Return both handles on every outcome; never close or retry a failed chunk. def file.file(source: File, destination: File, +chunk: U32, cap: U32) -> IO(File & File & Outcome): Stream.file.socket (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=file.socket) def file.socket(source: File, destination: Socket, tls: Bool, +chunk: U32, cap: U32) -> IO(File & Socket & Outcome): Stream.socket.file (https://jend.leeeet.dev/definition.txt?path=bend-kit-stream@0.3.1.0/stream.bend&name=socket.file) # ms is the unchanged per-read Wire deadline, including the one-byte cap probe. def socket.file(source: Socket, destination: File, tls: Bool, +chunk: U32, cap: U32, ms: U32) -> IO(Socket & File & Outcome):