Current section

Files

Jump to
agent_session_manager lib asm extensions routing strategy.ex
Raw

lib/asm/extensions/routing/strategy.ex

defmodule ASM.Extensions.Routing.Strategy do
@moduledoc """
Selection strategy contract for routing provider candidates.
"""
alias ASM.Error
@typedoc "Router candidate metadata presented to strategies."
@type candidate :: %{
required(:id) => term(),
required(:provider) => atom(),
required(:provider_opts) => keyword(),
required(:priority) => integer(),
required(:weight) => pos_integer(),
required(:position) => non_neg_integer()
}
@typedoc "Opaque strategy state."
@type state :: term()
@callback init(keyword()) :: {:ok, state()} | {:error, Error.t()}
@callback choose([candidate()], state(), keyword()) ::
{:ok, candidate(), state()} | :none | {:error, Error.t()}
end