defmodule HTTP.Transport do
@moduledoc false
@type socket :: port() | :ssl.sslsocket()
@type message :: {:data, binary()} | :closed | {:error, term()} | :unknown
@callback connect(String.t(), non_neg_integer(), keyword(), timeout()) ::
{:ok, socket()} | {:error, term()}
@callback controlling_process(socket(), pid()) :: :ok | {:error, term()}
@callback send(socket(), iodata()) :: :ok | {:error, term()}
@callback setopts(socket(), keyword()) :: :ok | {:error, term()}
@callback close(socket()) :: :ok
@callback normalize_message(term(), socket()) :: message()
end