Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions features/dd-sdk-android-flags/api/apiSurface
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,24 @@ interface com.datadog.android.flags.featureflags.FlagsClient
fun resolveStringValue(String, String): String
fun resolveDoubleValue(String, Double): Double
fun resolveIntValue(String, Int): Int
fun resolveLongValue(String, Long): Long
fun resolveStructureValue(String, org.json.JSONObject): org.json.JSONObject
fun <T> resolve(String, T): com.datadog.android.flags.model.ResolutionDetails<T>
class Builder
constructor(String = DEFAULT_CLIENT_NAME, com.datadog.android.api.SdkCore = Datadog.getInstance())
fun build(): FlagsClient
companion object
fun get(String = DEFAULT_CLIENT_NAME, com.datadog.android.api.SdkCore = Datadog.getInstance()): FlagsClient
data class com.datadog.android.flags.featureflags.model.EvaluationContext
constructor(String, Map<String, String> = emptyMap())
enum com.datadog.android.flags.model.ErrorCode
- PROVIDER_NOT_READY
- FLAG_NOT_FOUND
- PARSE_ERROR
- TYPE_MISMATCH
- TARGETING_KEY_MISSING
- INVALID_CONTEXT
- PROVIDER_FATAL
- GENERAL
data class com.datadog.android.flags.model.ResolutionDetails<T>
constructor(T, String? = null, String? = null, ErrorCode? = null, String? = null, Map<String, Any>? = null)
37 changes: 37 additions & 0 deletions features/dd-sdk-android-flags/api/dd-sdk-android-flags.api
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,11 @@ public abstract interface class com/datadog/android/flags/featureflags/FlagsClie
public static fun get ()Lcom/datadog/android/flags/featureflags/FlagsClient;
public static fun get (Ljava/lang/String;)Lcom/datadog/android/flags/featureflags/FlagsClient;
public static fun get (Ljava/lang/String;Lcom/datadog/android/api/SdkCore;)Lcom/datadog/android/flags/featureflags/FlagsClient;
public abstract fun resolve (Ljava/lang/String;Ljava/lang/Object;)Lcom/datadog/android/flags/model/ResolutionDetails;
public abstract fun resolveBooleanValue (Ljava/lang/String;Z)Z
public abstract fun resolveDoubleValue (Ljava/lang/String;D)D
public abstract fun resolveIntValue (Ljava/lang/String;I)I
public abstract fun resolveLongValue (Ljava/lang/String;J)J
public abstract fun resolveStringValue (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
public abstract fun resolveStructureValue (Ljava/lang/String;Lorg/json/JSONObject;)Lorg/json/JSONObject;
public abstract fun setEvaluationContext (Lcom/datadog/android/flags/featureflags/model/EvaluationContext;)V
Expand Down Expand Up @@ -66,3 +68,38 @@ public final class com/datadog/android/flags/featureflags/model/EvaluationContex
public fun toString ()Ljava/lang/String;
}

public final class com/datadog/android/flags/model/ErrorCode : java/lang/Enum {
public static final field FLAG_NOT_FOUND Lcom/datadog/android/flags/model/ErrorCode;
public static final field GENERAL Lcom/datadog/android/flags/model/ErrorCode;
public static final field INVALID_CONTEXT Lcom/datadog/android/flags/model/ErrorCode;
public static final field PARSE_ERROR Lcom/datadog/android/flags/model/ErrorCode;
public static final field PROVIDER_FATAL Lcom/datadog/android/flags/model/ErrorCode;
public static final field PROVIDER_NOT_READY Lcom/datadog/android/flags/model/ErrorCode;
public static final field TARGETING_KEY_MISSING Lcom/datadog/android/flags/model/ErrorCode;
public static final field TYPE_MISMATCH Lcom/datadog/android/flags/model/ErrorCode;
public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/flags/model/ErrorCode;
public static fun values ()[Lcom/datadog/android/flags/model/ErrorCode;
}

public final class com/datadog/android/flags/model/ResolutionDetails {
public fun <init> (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;)V
public synthetic fun <init> (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/Object;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/String;
public final fun component4 ()Lcom/datadog/android/flags/model/ErrorCode;
public final fun component5 ()Ljava/lang/String;
public final fun component6 ()Ljava/util/Map;
public final fun copy (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/flags/model/ResolutionDetails;
public static synthetic fun copy$default (Lcom/datadog/android/flags/model/ResolutionDetails;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/flags/model/ResolutionDetails;
public fun equals (Ljava/lang/Object;)Z
public final fun getErrorCode ()Lcom/datadog/android/flags/model/ErrorCode;
public final fun getErrorMessage ()Ljava/lang/String;
public final fun getFlagMetadata ()Ljava/util/Map;
public final fun getReason ()Ljava/lang/String;
public final fun getValue ()Ljava/lang/Object;
public final fun getVariant ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import com.datadog.android.flags.featureflags.internal.repository.net.DefaultFla
import com.datadog.android.flags.featureflags.internal.repository.net.PrecomputeMapper
import com.datadog.android.flags.featureflags.model.EvaluationContext
import com.datadog.android.flags.internal.FlagsFeature
import com.datadog.android.flags.model.ResolutionDetails
import org.json.JSONObject

/**
Expand Down Expand Up @@ -100,6 +101,18 @@ interface FlagsClient {
*/
fun resolveIntValue(flagKey: String, defaultValue: Int): Int

/**
* Resolves a long integer flag value.
*
* Useful for values that may exceed Int.MAX_VALUE such as timestamps,
* large identifiers, or counters.
*
* @param flagKey The unique identifier of the flag to resolve.
* @param defaultValue The value to return if the flag cannot be retrieved or parsed.
* @return The long value of the flag, or the default value if unavailable.
*/
fun resolveLongValue(flagKey: String, defaultValue: Long): Long

/**
* Resolves a structured flag value as a JSON object.
*
Expand All @@ -109,6 +122,40 @@ interface FlagsClient {
*/
fun resolveStructureValue(flagKey: String, defaultValue: JSONObject): JSONObject

/**
* Resolves a flag value with detailed resolution information.
*
* This is the core resolution method that provides comprehensive details about the flag
* resolution process, including the resolved value, variant identifier, resolution reason,
* error information, and any associated metadata.
*
* ## Usage Examples
*
* ```kotlin
* // Boolean flag
* val boolResult = client.resolve("feature-enabled", false)
* if (boolResult.errorCode == null) {
* println("Feature is ${boolResult.value}, variant: ${boolResult.variant}")
* }
*
* // String flag
* val stringResult = client.resolve("api-endpoint", "https://default.com")
* println("Using endpoint: ${stringResult.value}")
*
* // With metadata
* val result = client.resolve("experiment", "control")
* result.flagMetadata?.let { metadata ->
* println("Experiment metadata: $metadata")
* }
* ```
*
* @param T The type of the flag value (Boolean, String, Int, Long, Double, or JSONObject).
* @param flagKey The unique identifier of the flag to resolve.
* @param defaultValue The value to return if the flag cannot be retrieved or parsed.
* @return [ResolutionDetails] containing the value, variant, reason, error info, and metadata.
*/
fun <T> resolve(flagKey: String, defaultValue: T): ResolutionDetails<T>

/**
* Builder for creating [FlagsClient] instances with custom configuration.
*
Expand Down
Loading
Loading