Skip to main content

lib/pi/protocol/api/extension.ex

defmodule Pi.Protocol.API.Extension do
  @moduledoc "Plugin or skill API exposed to pi as an extension API."

  use JSONCodec, fast_path: :json

  alias Pi.Plugin.API

  defstruct [:name, :module, :alias, description: "", examples: []]

  @type t :: %__MODULE__{
          name: atom(),
          module: module(),
          alias: atom() | nil,
          description: String.t(),
          examples: [String.t()]
        }

  codec(:name, atom: :unsafe)
  codec(:module, atom: :unsafe)
  codec(:alias, atom: :unsafe)

  def from_api(%API{} = api) do
    %__MODULE__{
      name: api.name,
      module: api.module,
      alias: api.alias,
      description: api.description,
      examples: api.examples
    }
  end
end