Current section

Files

Jump to
pi_bridge lib pi transport.ex
Raw

lib/pi/transport.ex

defmodule Pi.Transport do
@moduledoc "Process-safe outbound boundary for the active extension transport."
alias Pi.ProcessOwner
alias Pi.Protocol.Request
alias Pi.Transport.Payload
@spec register(pid()) :: :ok
def register(owner), do: ProcessOwner.register(__MODULE__, owner)
@spec unregister(pid()) :: :ok
def unregister(owner), do: ProcessOwner.unregister(__MODULE__, owner)
@spec request(String.t(), atom(), map()) :: :ok
def request(id, operation, payload)
when is_binary(id) and is_atom(operation) and is_map(payload) do
emit(%Request{type: :request, id: id, op: operation, payload: payload})
end
@spec emit(map() | struct()) :: :ok
def emit(payload) when is_map(payload) do
ProcessOwner.notify(__MODULE__, {:pi_transport_emit, Payload.encode(payload)})
end
end