Skip to main content

lib/pi/protocol/bridge_info.ex

defmodule Pi.Protocol.BridgeInfo do
  @moduledoc "Startup inventory for a pi_bridge session."

  use JSONCodec, fast_path: :json

  alias Pi.Protocol.API.Inventory
  alias Pi.Protocol.PluginCommand
  alias Pi.Protocol.PluginInfo
  alias Pi.Protocol.SkillInfo

  defstruct [
    :project,
    :version,
    :transport,
    skills: [],
    plugins: [],
    commands: [],
    apis: %Inventory{}
  ]

  @type t :: %__MODULE__{
          project: atom() | nil,
          version: String.t() | nil,
          transport: atom() | nil,
          skills: [SkillInfo.t()],
          plugins: [PluginInfo.t()],
          commands: [PluginCommand.t()],
          apis: Inventory.t()
        }

  codec(:project, atom: :unsafe)
  codec(:transport, atom: :existing)
end