HTTP contract.
-type body() :: {ContentType :: binary(), Body :: binary()} | undefined.
-type headers() :: #{binary() => binary()}.
-type method() :: get | post | put | patch | delete.
-type status() :: non_neg_integer().
-callback request(method(), URI :: binary(), headers(), body(), adapter_config()) -> {ok, {status(), headers(), binary()}} | {error, term()}.
-spec request(hex_core:config(), method(), URI :: binary(), headers(), body()) -> {ok, {status(), headers(), binary()}} | {error, term()}.