Skip to main content

lib/pi/protocol/response.ex

defmodule Pi.Protocol.Response do
  @moduledoc "Pi-to-BEAM multiplexed response envelope."

  use JSONCodec, fast_path: :json

  defstruct [:type, :id, ok: false, result: nil, error: nil]

  @type t :: %__MODULE__{
          type: atom(),
          id: String.t(),
          ok: boolean(),
          result: term(),
          error: term()
        }

  codec(:type, atom: :existing)

  def to_result(%__MODULE__{ok: true, result: result}), do: {:ok, result}
  def to_result(%__MODULE__{ok: false, error: error}), do: {:error, error}
end