@callback initialize(map()) :: :ok
@callback select_variable([Variable.t()]) :: Variable.t() | nil
@callback select_variable([Variable.t()], any()) :: Variable.t() | nil
@callback update(map(), Keyword.t()) :: :ok