Behaviours for the LaunchDarkly SDK
@callback identify(user :: map()) :: :ok
@callback initialized(tag :: atom()) :: boolean()
@callback new_user(user :: map()) :: user :: term()
@callback set_value(is_on? :: boolean(), flag :: map()) :: flag_builder :: term()
@callback start_instance(sdk_key :: binary(), opts :: map()) :: :ok | {:error, atom(), term()}
@callback stop_all_instances() :: :ok
@callback test_flag(flag_name :: binary()) :: {:ok, flag_builder :: term()}
@callback test_update(flag_builder :: term()) :: :ok
@callback track(event_name :: binary(), context :: map(), data :: map()) :: :ok
@callback track(event_name :: binary(), context :: map(), data :: map(), tag :: atom()) :: :ok
@callback value_for_all(value :: term(), flag_builder :: term()) :: flag_builder :: term()
@callback variation(flag_name :: binary(), context :: map(), fallback :: term()) :: term()