1+ package dev.openfeature.sdk.sampleapp
2+
3+ import dev.openfeature.sdk.*
4+ import kotlinx.coroutines.delay
5+
6+ class ExampleProvider (override val hooks : List <Hook <* >> = listOf()) : FeatureProvider {
7+
8+ private var currentContext: EvaluationContext ? = ImmutableContext ()
9+ var delayTime = 1000L
10+ var returnDefaults = false
11+ val flags = mutableMapOf<String , Any >().apply {
12+ put(" booleanFlag" , true )
13+ put(" stringFlag" , " this is a string" )
14+ put(" intFlag" , 1337 )
15+ put(" doubleFlag" , 42.0 )
16+ put(
17+ " objectFlag" ,
18+ Value .Structure (mapOf (" key1" to Value .String (" value" ), " key2" to Value .Integer (10 )))
19+ )
20+ }
21+
22+ override val metadata: ProviderMetadata
23+ get() = object : ProviderMetadata {
24+ override val name: String = " ExampleProvider"
25+ }
26+
27+ override suspend fun initialize (initialContext : EvaluationContext ? ) {
28+ currentContext = initialContext
29+ // Simulate a delay in the provider initialization
30+ delay(delayTime)
31+ }
32+
33+ override fun shutdown () {
34+
35+ }
36+
37+ override suspend fun onContextSet (
38+ oldContext : EvaluationContext ? ,
39+ newContext : EvaluationContext
40+ ) {
41+ currentContext = newContext
42+ delay(delayTime)
43+ }
44+
45+ override fun getBooleanEvaluation (
46+ key : String ,
47+ defaultValue : Boolean ,
48+ context : EvaluationContext ?
49+ ): ProviderEvaluation <Boolean > = generateProviderEvaluation<Boolean >(defaultValue, key)
50+
51+ override fun getStringEvaluation (
52+ key : String ,
53+ defaultValue : String ,
54+ context : EvaluationContext ?
55+ ): ProviderEvaluation <String > = generateProviderEvaluation<String >(defaultValue, key)
56+
57+ override fun getIntegerEvaluation (
58+ key : String ,
59+ defaultValue : Int ,
60+ context : EvaluationContext ?
61+ ): ProviderEvaluation <Int > = generateProviderEvaluation<Int >(defaultValue, key)
62+
63+ override fun getDoubleEvaluation (
64+ key : String ,
65+ defaultValue : Double ,
66+ context : EvaluationContext ?
67+ ): ProviderEvaluation <Double > = generateProviderEvaluation<Double >(defaultValue, key)
68+
69+ override fun getObjectEvaluation (
70+ key : String ,
71+ defaultValue : Value ,
72+ context : EvaluationContext ?
73+ ): ProviderEvaluation <Value > = generateProviderEvaluation<Value >(defaultValue, key)
74+
75+ private inline fun <reified T > generateProviderEvaluation (
76+ defaultValue : T ,
77+ key : String
78+ ): ProviderEvaluation <T > {
79+ if (returnDefaults) {
80+ return ProviderEvaluation (defaultValue, null , reason = " returnDefaults" )
81+ }
82+ return with (flags) {
83+ if (containsKey(key) && get(key) is T ) {
84+ ProviderEvaluation (get(key) as T , " variant1" , reason = " match" )
85+ } else if (containsKey(key)) {
86+ ProviderEvaluation (defaultValue, null , reason = " invalid type" )
87+ } else {
88+ ProviderEvaluation (defaultValue, null , reason = " notfound" )
89+ }
90+ }
91+ }
92+ }
0 commit comments