anchor.diff:  -type qs()               :: [{binary(), binary() | true}].
   -type headers()          :: headers().
   -type request_options()  :: map().
  +-type body_handler()     :: fun((binary(), fin | nofin, any()) -> any()).
   -type response_handler() :: fun((100..999, headers(), iodata()) -> iodata()).
   
   -export_type([qs/0, headers/0, request_options/0, response_handler/0]).
  
positive.code: 
  -spec await_body(pid(), reference(), non_neg_integer(), reference(), iodata()) -> iodata().
  await_body(Pid, Ref, Timeout, Mref, Acc) ->
  	receive
  		{gun_data, Pid, Ref, nofin, Data} ->
  			await_body(Pid, Ref, Timeout, Mref, <<Acc/binary, Data/binary>>);
  		{gun_data, Pid, Ref, fin, Data} ->
  			demonitor(Mref, [flush]),
  			gun:flush(Ref),
  			<<Acc/binary, Data/binary>>;
  		{gun_error, Pid, Ref, Reason} ->
  			demonitor(Mref, [flush]),
  			gun:flush(Ref),
  
negative.code: -spec parse_resource_key(binary(), binary()) -> {binary(), binary()}.
  parse_resource_key(<<$/, Rest/bits>>, Acc) -> {Acc, Rest};
  parse_resource_key(<<C, Rest/bits>>, Acc)  -> parse_resource_key(Rest, <<Acc/binary, C>>).
  
  -spec accumulate_body(binary(), fin | nofin, binary()) -> binary().
  accumulate_body(Data, _IsFin, Acc) ->
  	<<Acc/binary, Data/binary>>.
  