anchor.diff:    {keep_state, statedata(), [{timeout, timeout(), get_work}]}.
   enqueue_work_or_stop(_StateName, get_events, From, #{responses := Responses} = StateData) ->
       Reply = queue:to_list(Responses),
  -    ok = gen_statem:reply(From, Reply),
  -    {keep_state, StateData#{responses := queue:new()}};
  +    {keep_state, StateData#{responses := queue:new()}, [{reply, From, Reply}]};
   enqueue_work_or_stop(StateName = at_rest, Event, From, StateData) ->
       enqueue_work_or_stop(StateName, Event, From, StateData, 0);
   enqueue_work_or_stop(StateName, Event, From, StateData) ->
  
positive.code:               , {data, Data, FinNoFin}
                , #{stream := StreamRef, pid := Pid} = StateData) ->
      ok = gun:data(Pid, StreamRef, FinNoFin, Data),
      gen_statem:reply(From, ok),
      {next_state, wait_response, StateData};
  wait_response({call, From}, Event, StateData) ->
      enqueue_work_or_stop(wait_response, Event, From, StateData);
  wait_response(cast, {'DOWN', _, _, _, Reason}, _StateData) ->
  
negative.code:             {keep_state, NewStateData, [{timeout, Timeout, get_work}]};
          not_work ->
              Error = {error, {unexpected, Event}},
              {keep_state_and_data, [{reply, From, Error}]}
      end.
  
  %% @private
  