def stream.read
bend-kit-http@0.38.5.0 · http.bend:4816
import bend-kit-http@0.38.5.0/http.bend as Http
import Base
import bend-kit-bytes@0.3.3.0/bytes.bend as Bytes
4816def stream.read(st: Stream) -> IO(Stream & Result<&1, &1, Err, Maybe<&1, Bytes.Bytes>>):
4817 Stream{+tls, s, +ms, res, +rb, out, decs, back} = st
4818 match out:
4819 case PoPiece{b}:
4820 do IO<Stream & Result<&1, &1, Err, Maybe<&1, Bytes.Bytes>>>:
4821 next : Stream <- stream.feed.st(Stream{tls, s, ms, res, rb, PoNone{}, decs, back}, b)
4822 stream.read(next)
4823 case PoReady{b}:
4824 IO.pure(Stream & Result<&1, &1, Err, Maybe<&1, Bytes.Bytes>>,
4825 (Stream{tls, s, ms, res, rb, stream.after(rb), decs, back}, Done{Some{b}}))
4826 case PoEnd{}:
4827 do IO<Stream & Result<&1, &1, Err, Maybe<&1, Bytes.Bytes>>>:
4828 good : Bool <- stream.finish(decs)
4829 return stream.ended(good, tls, s, ms, res, rb, back)
4830 case PoBad{+e}:
4831 IO.pure(Stream & Result<&1, &1, Err, Maybe<&1, Bytes.Bytes>>,
4832 (Stream{tls, s, ms, res, rb, PoBad{e}, decs, back}, Fail{e}))
4833 case PoNone{}:
4834 do IO<Stream & Result<&1, &1, Err, Maybe<&1, Bytes.Bytes>>>:
4835 m : Socket & Result<&1, &1, U32 & String, U32 & Array<U32>> <- io.recv.words(tls, s, 65536, ms)
4836 stream.read(stream.got(tls, ms, res, decs, back, rb, m))