Defines the behavior that all transport implementations must follow.
@type message() :: String.t()
@type reason() :: term()
@type t() :: pid() | module()
@callback send_message(message()) :: :ok | {:error, reason()}
@callback send_message(t(), message()) :: :ok | {:error, reason()}
@callback shutdown(t()) :: :ok | {:error, reason()}
@callback start_link(keyword()) :: Supervisor.on_start()