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