Skip to content

Commit 0fa7baf

Browse files
committed
♻️ refactor(config): update StringOrDefault to handle nullable values
- change value type from String to String? in StringOrDefault data class - modify or() method to return default when value is null - update USE_DEFAULT constant to use null instead of a marker string - adjust serialization to handle nullable StringOrDefault instances
1 parent 4c83e4b commit 0fa7baf

1 file changed

Lines changed: 7 additions & 9 deletions

File tree

  • surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/config/type

surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/config/type/StringOrDefault.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,14 @@ import java.util.function.Predicate
2323
* - Contains helper methods and a constant (`USE_DEFAULT`) for working with default behavior.
2424
*/
2525
@ConsistentCopyVisibility
26-
data class StringOrDefault private constructor(val value: String) {
26+
data class StringOrDefault private constructor(val value: String?) {
2727

28-
infix fun or(default: String): String {
29-
return if (value == DEFAULT_MARKER) default else value
30-
}
28+
infix fun or(default: String): String = value ?: default
3129

3230
companion object {
3331
private const val DEFAULT_MARKER = "__default__"
3432

35-
val USE_DEFAULT = StringOrDefault(DEFAULT_MARKER)
33+
val USE_DEFAULT = StringOrDefault(null)
3634

3735
fun of(value: String) = StringOrDefault(value)
3836
}
@@ -42,9 +40,9 @@ data class StringOrDefault private constructor(val value: String) {
4240
type: AnnotatedType?,
4341
obj: Any?
4442
): StringOrDefault? {
45-
val value = obj.toString()
43+
val value = obj?.toString()
4644

47-
return if (value == DEFAULT_MARKER) {
45+
return if (value == null || value == DEFAULT_MARKER) {
4846
USE_DEFAULT
4947
} else {
5048
StringOrDefault(value)
@@ -53,10 +51,10 @@ data class StringOrDefault private constructor(val value: String) {
5351

5452
override fun serialize(
5553
type: AnnotatedType?,
56-
item: StringOrDefault,
54+
item: StringOrDefault?,
5755
typeSupported: Predicate<Class<*>?>?
5856
): Any {
59-
return item.value
57+
return item?.value ?: DEFAULT_MARKER
6058
}
6159
}
6260
}

0 commit comments

Comments
 (0)