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

Uses (22)

Used by (5)