anchor.diff:  receive_data({gun_error, _Pid, StreamRef, _Reason},
                #{stream := StreamRef} = State) ->
       {next_state, at_rest, State, 0}.
  -
  -%% @private
  --spec receive_chunk(term(), pid(), term()) -> term().
  -receive_chunk(Event, From, State) ->
  -    enqueue_work_or_stop(receive_chunk, Event, From, State).
   
   %% @private
   %% @doc Chunked data response
  
positive.code: %% gen_fsm states
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  %See if we have work. If we do, dispatch.
  %If we don't, stay in at_rest.
  %% @private
  -spec at_rest(any(), state()) -> {next_state, atom(), state()}.
  at_rest(timeout, State) ->
      io:format("at_rest timeout~n"),
      case get_work(State) of
          no_work ->
              {next_state, at_rest, State};
  
negative.code: -type http_verb()  :: get | post | head | delete | patch | put | options.
  -type uri()        :: iodata().
  -type headers()    :: #{}.
  -type body()       :: iodata() | body_chunked.
  -type options()    ::
          #{ async => boolean()
           , async_mode => binary | sse
  