Solve behaviour (Solve v0.2.1)

Copy Markdown View Source

Coordinates controller graph validation, lifecycle management, and subscriptions.

Summary

Types

controller_name()

@type controller_name() :: Solve.ControllerSpec.name()

controller_status()

@type controller_status() :: :started | :stopped

controller_target()

@type controller_target() ::
  controller_name() | {controller_name(), Solve.Collection.id()}

graph()

@type graph() :: [Solve.ControllerSpec.t()]

runtime_state()

@type runtime_state() :: map()

Callbacks

controllers()

@callback controllers() :: graph()

Functions

controller_events(app, controller_name)

@spec controller_events(GenServer.server(), controller_target()) :: [atom()] | nil

controller_pid(app, controller_name)

@spec controller_pid(GenServer.server(), controller_target()) :: pid() | nil

controller_variant(app, controller_name)

@spec controller_variant(GenServer.server(), controller_name()) ::
  Solve.ControllerSpec.variant() | nil

dispatch(controller_name, event)

@spec dispatch(controller_target(), atom()) :: :ok

dispatch(controller_name, event, payload)

@spec dispatch(controller_target(), atom(), term()) :: :ok

dispatch(app, controller_name, event, payload \\ %{})

@spec dispatch(GenServer.server(), controller_target(), term(), term()) :: :ok

subscribe(app, controller_name, subscriber \\ self())

@spec subscribe(GenServer.server(), controller_target(), pid()) :: term()