anchor.diff:    case gun:await_body(Conn, Ref, Timeout) of
       {ok, Body} ->
         {Body2, Req2, HandlerState} = call(Req, State, res_body, Body),
  -      ok = cowboy_req:chunk(Body2, Req2),
  -      terminate(Req, State#state{handler_state = HandlerState});
  +      send(Req2, State#state{handler_state = HandlerState}, Body2, fun terminate/2);
       {error, timeout} ->
         next(Req, State, 504);
       {error, Reason} ->
  
positive.code: chunk_res_body(Req, State = #state{conn = Conn, ref = Ref, timeout = Timeout}) ->
    case gun:await(Conn, Ref, Timeout) of
      {data, nofin, Data} ->
        ok = cowboy_req:chunk(Data, Req),
        chunk_res_body(Req, State);
      {data, fin, Data} ->
        ok = cowboy_req:chunk(Data, Req),
        terminate(Req, State);
      {error, timeout} ->
        next(Req, State, 504);
      {error, Reason} ->
  
negative.code:       ok = gun:data(Conn, Ref, fin, Body2),
        next(Req3, State#state{handler_state = HandlerState}, fun res_status/2);
      {error, chunked} ->
        %% TODO buffer this and call `req_body/3`
        next(Req, State, fun chunk_req_body/2);
      {error, badlength} ->
        next(Req, State, 413)
    end.
  