Quiver.Transport behaviour (quiver v0.2.0)

Copy Markdown View Source

Behaviour for socket transports.

Transports are passive by default. Use activate/1 to switch to {active, :once} mode for receiving a single socket message. All callbacks return the (potentially updated) transport struct.

Summary

Types

option()

@type option() :: {atom(), term()}

t()

@type t() :: struct()

Callbacks

activate(transport)

@callback activate(transport :: t()) :: {:ok, t()} | {:error, t(), term()}

close(transport)

@callback close(transport :: t()) :: {:ok, t()}

connect(host, port, opts)

@callback connect(host :: String.t(), port :: :inet.port_number(), opts :: [option()]) ::
  {:ok, t()} | {:error, term()}

controlling_process(transport, pid)

@callback controlling_process(transport :: t(), pid :: pid()) ::
  {:ok, t()} | {:error, t(), term()}

recv(transport, length, timeout)

@callback recv(transport :: t(), length :: non_neg_integer(), timeout :: timeout()) ::
  {:ok, t(), binary()} | {:error, t(), term()}

send(transport, data)

@callback send(transport :: t(), data :: iodata()) :: {:ok, t()} | {:error, t(), term()}

upgrade(socket, host, port, opts)

(optional)
@callback upgrade(
  socket :: :gen_tcp.socket(),
  host :: String.t(),
  port :: :inet.port_number(),
  opts :: [option()]
) :: {:ok, t()} | {:error, term()}