-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathTrait.kt
More file actions
101 lines (80 loc) · 3.58 KB
/
Trait.kt
File metadata and controls
101 lines (80 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package com.flagsmith.entities
import com.google.gson.*
import com.google.gson.annotations.SerializedName
import java.lang.reflect.Type
data class Trait (
val identifier: String? = null,
@SerializedName(value = "trait_key") val key: String,
@SerializedName(value = "trait_value") val traitValue: Any,
val transient: Boolean = false
) {
constructor(key: String, value: String, transient: Boolean = false)
: this(key = key, traitValue = value, transient = transient)
constructor(key: String, value: Int, transient: Boolean = false)
: this(key = key, traitValue = value, transient = transient)
constructor(key: String, value: Double, transient: Boolean = false)
: this(key = key, traitValue = value, transient = transient)
constructor(key: String, value: Boolean, transient: Boolean = false)
: this(key = key, traitValue = value, transient = transient)
@Deprecated("Use traitValue instead or one of the type-safe getters", ReplaceWith("traitValue"))
val value: String
get() { return traitValue as? String ?: traitValue.toString() }
val stringValue: String?
get() = traitValue as? String
val intValue: Int?
get() {
return when (traitValue) {
is Int -> traitValue
is Double -> traitValue.toInt()
else -> null
}
}
val doubleValue: Double?
get() = traitValue as? Double
val booleanValue: Boolean?
get() = traitValue as? Boolean
}
class TraitSerializer : JsonSerializer<Trait> {
override fun serialize(src: Trait, typeOfSrc: Type, context: JsonSerializationContext): JsonElement {
val jsonObject = JsonObject()
src.identifier?.let { jsonObject.addProperty("identifier", it) }
jsonObject.addProperty("trait_key", src.key)
jsonObject.addProperty("trait_value", src.traitValue.toString())
if (src.transient) {
jsonObject.addProperty("transient", true)
}
return jsonObject
}
}
data class TraitWithIdentity (
@SerializedName(value = "trait_key") val key: String,
@SerializedName(value = "trait_value") val traitValue: Any,
val identity: Identity,
val transient: Boolean = false
) {
constructor(key: String, value: String, identity: Identity, transient: Boolean = false)
: this(key = key, traitValue = value, identity = identity, transient = transient)
constructor(key: String, value: Int, identity: Identity, transient: Boolean = false)
: this(key = key, traitValue = value, identity = identity, transient = transient)
constructor(key: String, value: Double, identity: Identity, transient: Boolean = false)
: this(key = key, traitValue = value, identity = identity, transient = transient)
constructor(key: String, value: Boolean, identity: Identity, transient: Boolean = false)
: this(key = key, traitValue = value, identity = identity, transient = transient)
@Deprecated("Use traitValue instead or one of the type-safe getters", ReplaceWith("traitValue"))
val value: String
get() { return traitValue as? String ?: traitValue.toString() }
val stringValue: String?
get() = traitValue as? String
val intValue: Int?
get() {
return when (traitValue) {
is Int -> traitValue
is Double -> traitValue.toInt()
else -> null
}
}
val doubleValue: Double?
get() = traitValue as? Double
val booleanValue: Boolean?
get() = traitValue as? Boolean
}