defmodule Pi.Protocol.UIEvent do @moduledoc "BEAM-to-Pi UI event envelope." use JSONCodec, fast_path: :json defstruct [ :type, :op, :key, :text, :title, :current, :total, :lines, :placement, :message, :level ] @type t :: %__MODULE__{ type: atom(), op: atom(), key: atom() | String.t() | nil, text: String.t() | nil, title: String.t() | nil, current: non_neg_integer() | nil, total: non_neg_integer() | nil, lines: [String.t()] | nil, placement: atom() | nil, message: String.t() | nil, level: atom() | nil } codec(:type, atom: :existing) codec(:op, atom: :existing) codec(:key, atom: :unsafe) codec(:placement, atom: :existing) codec(:level, atom: :existing) end