CliSubprocessCore.ProtocolAdapter behaviour (CliSubprocessCore v0.2.0)

Copy Markdown View Source

Pure codec and protocol-state boundary used by CliSubprocessCore.ProtocolSession.

Adapters own protocol encoding, decoding, correlation mapping, and readiness classification. They do not own processes, timers, pending-request tables, or transport lifecycle.

Summary

Types

correlation_key()

@type correlation_key() :: term()

inbound_event()

@type inbound_event() ::
  {:ready, term()}
  | {:response, correlation_key(), {:ok, term()} | {:error, term()}}
  | {:peer_request, correlation_key(), term()}
  | {:notification, term()}
  | {:protocol_error, term()}
  | {:fatal_protocol_error, term()}
  | :ignore

Callbacks

encode_notification(term, adapter_state)

@callback encode_notification(term(), adapter_state :: term()) ::
  {:ok, frame :: binary(), adapter_state :: term()} | {:error, reason :: term()}

encode_peer_reply(correlation_key, arg2, adapter_state)

@callback encode_peer_reply(
  correlation_key(),
  {:ok, term()} | {:error, term()},
  adapter_state :: term()
) ::
  {:ok, frame :: binary(), adapter_state :: term()} | {:error, reason :: term()}

encode_request(term, adapter_state)

@callback encode_request(term(), adapter_state :: term()) ::
  {:ok, correlation_key(), frame :: binary(), adapter_state :: term()}
  | {:error, reason :: term()}

handle_inbound(binary, adapter_state)

@callback handle_inbound(binary(), adapter_state :: term()) ::
  {:ok, [inbound_event()], adapter_state :: term()} | {:error, reason :: term()}

init(keyword)

@callback init(keyword()) ::
  {:ok, adapter_state :: term(), startup_frames :: [binary()]}
  | {:error, reason :: term()}