lib/config_cat/override_data_source.ex

defprotocol ConfigCat.OverrideDataSource do
  @moduledoc """
  Data source for local overrides of feature flags and settings.

  With flag overrides you can overwrite the feature flags & settings downloaded
  from the ConfigCat CDN with local values. Moreover, you can specify how the
  overrides should apply over the downloaded values. See `t:behaviour/0`.
  """

  alias ConfigCat.Config

  @typedoc """
  Flag override behaviour.

  The following 3 behaviours are supported:

  - Local/Offline mode (`:local_only`): When evaluating values, the SDK will not
    use feature flags & settings from the ConfigCat CDN, but it will use all
    feature flags & settings that are loaded from local-override sources.

  - Local over remote (`:local_over_remote`): When evaluating values, the SDK
    will use all feature flags & settings that are downloaded from the ConfigCat
    CDN, plus all feature flags & settings that are loaded from local-override
    sources. If a feature flag or a setting is defined both in the downloaded
    and the local-override source then the local-override version will take
    precedence.

  - Remote over local (`:remote_over_local`): When evaluating values, the SDK
    will use all feature flags & settings that are downloaded from the ConfigCat
    CDN, plus all feature flags & settings that are loaded from local-override
    sources. If a feature flag or a setting is defined both in the downloaded
    and the local-override source then the downloaded version will take
    precedence.
  """
  @type behaviour :: :local_only | :local_over_remote | :remote_over_local

  @doc """
  Return the selected flag override behaviour.
  """
  @spec behaviour(data_source :: t) :: behaviour
  def behaviour(data_source)

  @doc """
  Return the local flag overrides from the data source.
  """
  @spec overrides(data_source :: t) :: Config.t()
  def overrides(data_source)
end