anchor.diff:  -type connection() :: pid().
   -type http_verb()  :: get | post | head | delete | patch | put | options.
   -type uri()        :: iodata().
  --type headers()    :: #{} | proplists:proplist().
  +-type headers()    :: #{_ => _} | proplists:proplist().
   -type body()       :: iodata() | body_chunked.
   -type options()    ::
           #{ async => boolean()
  
positive.code: -spec start_link(string(), integer(), connection_type(), open_opts()) ->
      {ok, pid()} | ignore | {error, term()}.
  start_link(Host, Port, Type, Opts) ->
      gen_fsm:start_link(shotgun, [Host, Port, Type, Opts], []).
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% API
  
negative.code:     {error, already_present | {already_started, pid()} |
              gun_open_failed | gun_open_timeout}.
  open(Host, Port, Type, Opts) ->
      supervisor:start_child(shotgun_sup, [Host, Port, Type, Opts]).
  
  %% @doc Closes the connection with the host.
  -spec close(pid()) -> ok.
  