type t = | Waiting | Fixed of Response.t | Streaming of Response.t * Body.Writer.t | Upgrade of Response.t * (unit -> unit) let output_state t ~writer : Output_state.t = match t with | Fixed _ -> Complete | Waiting -> if Serialize.Writer.is_closed writer then Complete else Waiting | Streaming(_, response_body) -> if Serialize.Writer.is_closed writer then Complete else if Body.Writer.requires_output response_body then Ready else Complete | Upgrade _ -> Ready let flush_response_body t = match t with | Streaming (_, response_body) -> Body.Writer.transfer_to_writer response_body | _ -> ()