def server.response

bend-kit-camber@0.15.0.1 · camber.bend:1080

import bend-kit-camber@0.15.0.1/camber.bend as Camber
import Base
import bend-kit-http@0.38.1.1/http.bend as Http
import bend-kit-http@0.38.1.1/completion.bend as TransportCompletion
import bend-kit-time@0.3.0.0/time.bend as Time

1080def server.response(~K: Data, ~H: Data,
1081  ~done: TransportCompletion.Completion<NoticePayload<K, H>> -> IO(Unit),
1082  config: K, started: Time.Duration, outcome: Outcome<Unit, ApplicationReport<H>>, +body: Chan(Http.Body), +response: Chan(Http.Res)
1083) -> IO(Http.Reply):
1084  match outcome:
1085    case Success{report}:
1086      do IO<Http.Reply>:
1087        result : Http.Res <- receive(Http.Res, response)
1088        Chan.close(Http.Body, body)
1089        Chan.close(Http.Res, response)
1090        return Http.reply.complete(~NoticePayload<K, H>, ~done, NoticePayload{config, started, report}, result)
1091    case _:
1092      do IO<Http.Reply>:
1093        # Closing alone retains buffered values in Base. Consume the rejected
1094        # body before closing; the single room1 send has already completed.
1095        discarded : Http.Body <- receive(Http.Body, body)
1096        Chan.close(Http.Body, body)
1097        Chan.close(Http.Res, response)
1098        return Http.reply.complete(~NoticePayload<K, H>, ~done, NoticePayload{config, started, CapacityRejected{}},
1099          Http.Res{503, Http.set(Http.empty(), "connection", "close"), Http.from_string("")})

Uses (19)

Used by (1)