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))

Uses (22)

Used by (5)