Split.RPC.Fallback (split v0.1.0)

This module is used to provide default values for all Splitd RPC calls.

When a call to Splitd fails, and the SDK was initialized with fallback_enabled, the fallback values are returned instead of the error received from the socket.

Summary

Functions

Provides a default value for the given RPC message.

Functions

Link to this function

fallback(message)

@spec fallback(Split.RPC.Message.t()) ::
  {:ok, map() | Split.Treatment.t(), list(), nil} | :ok

Provides a default value for the given RPC message.

Examples

iex> Fallback.fallback(%Message{o: 0x11})
{:ok, %Treatment{treatment: "control", label: "fallback treatment"}}

iex> Fallback.fallback(%Message{o: 0x13})
{:ok, %Treatment{treatment: "control", label: "fallback treatment", config: nil}}

iex> Fallback.fallback(%Message{
...>   o: 0x12,
...>   a: ["user_key", "bucketing_key", ["feature_1", "feature_2"], %{}]
...> })
{:ok,
 %{
   "feature_1" => %Treatment{treatment: "control", label: "fallback treatment"},
   "feature_2" => %Treatment{treatment: "control", label: "fallback treatment"}
 }}

iex> Fallback.fallback(%Message{o: 0x14, a: ["user_key", "bucketing_key", ["feature_a"], %{}]})
{:ok, %{"feature_a" => %Treatment{treatment: "control", label: "fallback treatment", config: nil}}}

iex> Fallback.fallback(%Message{o: 0xA1})
{:ok, nil}

iex> Fallback.fallback(%Message{o: 0xA2})
{:ok, []}

iex> Fallback.fallback(%Message{o: 0xA0})
{:ok, %{split_names: []}}

iex> Fallback.fallback(%Message{o: 0x80})
:ok