Skip to content

Commit d1a3f4d

Browse files
authored
Merge pull request #2923 from DataDog/typo/FFL-1184-resolve-value-method
[flags] Generic resolve method
2 parents 969ad5d + 1163ff5 commit d1a3f4d

File tree

14 files changed

+1083
-197
lines changed

14 files changed

+1083
-197
lines changed

features/dd-sdk-android-flags/api/apiSurface

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,23 @@ interface com.datadog.android.flags.featureflags.FlagsClient
1515
fun resolveDoubleValue(String, Double): Double
1616
fun resolveIntValue(String, Int): Int
1717
fun resolveStructureValue(String, org.json.JSONObject): org.json.JSONObject
18+
fun <T: Any> resolve(String, T): com.datadog.android.flags.model.ResolutionDetails<T>
1819
class Builder
1920
constructor(String = DEFAULT_CLIENT_NAME, com.datadog.android.api.SdkCore = Datadog.getInstance())
2021
fun build(): FlagsClient
2122
companion object
2223
fun get(String = DEFAULT_CLIENT_NAME, com.datadog.android.api.SdkCore = Datadog.getInstance()): FlagsClient
2324
data class com.datadog.android.flags.featureflags.model.EvaluationContext
2425
constructor(String, Map<String, String> = emptyMap())
26+
enum com.datadog.android.flags.model.ErrorCode
27+
- FLAG_NOT_FOUND
28+
- PARSE_ERROR
29+
- TYPE_MISMATCH
30+
data class com.datadog.android.flags.model.ResolutionDetails<T: Any>
31+
constructor(T, String? = null, ResolutionReason? = null, ErrorCode? = null, String? = null, Map<String, Any>? = null)
32+
enum com.datadog.android.flags.model.ResolutionReason
33+
- DEFAULT
34+
- TARGETING_MATCH
35+
- RULE_MATCH
36+
- PREREQUISITE_FAILED
37+
- ERROR

features/dd-sdk-android-flags/api/dd-sdk-android-flags.api

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public abstract interface class com/datadog/android/flags/featureflags/FlagsClie
3333
public static fun get ()Lcom/datadog/android/flags/featureflags/FlagsClient;
3434
public static fun get (Ljava/lang/String;)Lcom/datadog/android/flags/featureflags/FlagsClient;
3535
public static fun get (Ljava/lang/String;Lcom/datadog/android/api/SdkCore;)Lcom/datadog/android/flags/featureflags/FlagsClient;
36+
public abstract fun resolve (Ljava/lang/String;Ljava/lang/Object;)Lcom/datadog/android/flags/model/ResolutionDetails;
3637
public abstract fun resolveBooleanValue (Ljava/lang/String;Z)Z
3738
public abstract fun resolveDoubleValue (Ljava/lang/String;D)D
3839
public abstract fun resolveIntValue (Ljava/lang/String;I)I
@@ -68,3 +69,43 @@ public final class com/datadog/android/flags/featureflags/model/EvaluationContex
6869
public fun toString ()Ljava/lang/String;
6970
}
7071

72+
public final class com/datadog/android/flags/model/ErrorCode : java/lang/Enum {
73+
public static final field FLAG_NOT_FOUND Lcom/datadog/android/flags/model/ErrorCode;
74+
public static final field PARSE_ERROR Lcom/datadog/android/flags/model/ErrorCode;
75+
public static final field TYPE_MISMATCH Lcom/datadog/android/flags/model/ErrorCode;
76+
public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/flags/model/ErrorCode;
77+
public static fun values ()[Lcom/datadog/android/flags/model/ErrorCode;
78+
}
79+
80+
public final class com/datadog/android/flags/model/ResolutionDetails {
81+
public fun <init> (Ljava/lang/Object;Ljava/lang/String;Lcom/datadog/android/flags/model/ResolutionReason;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;)V
82+
public synthetic fun <init> (Ljava/lang/Object;Ljava/lang/String;Lcom/datadog/android/flags/model/ResolutionReason;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
83+
public final fun component1 ()Ljava/lang/Object;
84+
public final fun component2 ()Ljava/lang/String;
85+
public final fun component3 ()Lcom/datadog/android/flags/model/ResolutionReason;
86+
public final fun component4 ()Lcom/datadog/android/flags/model/ErrorCode;
87+
public final fun component5 ()Ljava/lang/String;
88+
public final fun component6 ()Ljava/util/Map;
89+
public final fun copy (Ljava/lang/Object;Ljava/lang/String;Lcom/datadog/android/flags/model/ResolutionReason;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/flags/model/ResolutionDetails;
90+
public static synthetic fun copy$default (Lcom/datadog/android/flags/model/ResolutionDetails;Ljava/lang/Object;Ljava/lang/String;Lcom/datadog/android/flags/model/ResolutionReason;Lcom/datadog/android/flags/model/ErrorCode;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/flags/model/ResolutionDetails;
91+
public fun equals (Ljava/lang/Object;)Z
92+
public final fun getErrorCode ()Lcom/datadog/android/flags/model/ErrorCode;
93+
public final fun getErrorMessage ()Ljava/lang/String;
94+
public final fun getFlagMetadata ()Ljava/util/Map;
95+
public final fun getReason ()Lcom/datadog/android/flags/model/ResolutionReason;
96+
public final fun getValue ()Ljava/lang/Object;
97+
public final fun getVariant ()Ljava/lang/String;
98+
public fun hashCode ()I
99+
public fun toString ()Ljava/lang/String;
100+
}
101+
102+
public final class com/datadog/android/flags/model/ResolutionReason : java/lang/Enum {
103+
public static final field DEFAULT Lcom/datadog/android/flags/model/ResolutionReason;
104+
public static final field ERROR Lcom/datadog/android/flags/model/ResolutionReason;
105+
public static final field PREREQUISITE_FAILED Lcom/datadog/android/flags/model/ResolutionReason;
106+
public static final field RULE_MATCH Lcom/datadog/android/flags/model/ResolutionReason;
107+
public static final field TARGETING_MATCH Lcom/datadog/android/flags/model/ResolutionReason;
108+
public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/flags/model/ResolutionReason;
109+
public static fun values ()[Lcom/datadog/android/flags/model/ResolutionReason;
110+
}
111+

features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/featureflags/FlagsClient.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.datadog.android.flags.featureflags.internal.repository.net.Precompute
2828
import com.datadog.android.flags.featureflags.model.EvaluationContext
2929
import com.datadog.android.flags.internal.FlagsFeature
3030
import com.datadog.android.flags.internal.net.PrecomputedAssignmentsDownloader
31+
import com.datadog.android.flags.model.ResolutionDetails
3132
import org.json.JSONObject
3233

3334
/**
@@ -114,6 +115,40 @@ interface FlagsClient {
114115
*/
115116
fun resolveStructureValue(flagKey: String, defaultValue: JSONObject): JSONObject
116117

118+
/**
119+
* Resolves a flag value with detailed resolution information.
120+
*
121+
* This is the core resolution method that provides comprehensive details about the flag
122+
* resolution process, including the resolved value, variant identifier, resolution reason,
123+
* error information, and any associated metadata.
124+
*
125+
* ## Usage Examples
126+
*
127+
* ```kotlin
128+
* // Boolean flag
129+
* val boolResult = client.resolve("feature-enabled", false)
130+
* if (boolResult.errorCode == null) {
131+
* println("Feature is ${boolResult.value}, variant: ${boolResult.variant}")
132+
* }
133+
*
134+
* // String flag
135+
* val stringResult = client.resolve("api-endpoint", "https://default.com")
136+
* println("Using endpoint: ${stringResult.value}")
137+
*
138+
* // With metadata
139+
* val result = client.resolve("experiment", "control")
140+
* result.flagMetadata?.let { metadata ->
141+
* println("Experiment metadata: $metadata")
142+
* }
143+
* ```
144+
*
145+
* @param T The type of the flag value (Boolean, String, Int, Double, or JSONObject). Must be non-null.
146+
* @param flagKey The unique identifier of the flag to resolve.
147+
* @param defaultValue The value to return if the flag cannot be retrieved or parsed. Cannot be null.
148+
* @return [ResolutionDetails] containing the value, variant, reason, error info, and metadata.
149+
*/
150+
fun <T : Any> resolve(flagKey: String, defaultValue: T): ResolutionDetails<T>
151+
117152
/**
118153
* Builder for creating [FlagsClient] instances with custom configuration.
119154
*

0 commit comments

Comments
 (0)