36 lines
1.5 KiB
Kotlin
36 lines
1.5 KiB
Kotlin
package co.electriccoin.zcash.configuration.model.map
|
|
|
|
import co.electriccoin.zcash.configuration.model.entry.ConfigKey
|
|
import kotlinx.collections.immutable.PersistentMap
|
|
import kotlinx.datetime.Instant
|
|
|
|
// The configurationMapping is intended to be a public API for configuration implementations rather
|
|
// than a public API for configuration clients.
|
|
data class StringConfiguration(val configurationMapping: PersistentMap<String, String>, override val updatedAt: Instant?) : Configuration {
|
|
|
|
override fun getBoolean(
|
|
key: ConfigKey,
|
|
defaultValue: Boolean
|
|
) = configurationMapping[key.key]?.let {
|
|
try {
|
|
it.toBooleanStrict()
|
|
} catch (@Suppress("SwallowedException") e: IllegalArgumentException) {
|
|
// In the future, log coercion failure as this could mean someone made an error in the remote config console
|
|
defaultValue
|
|
}
|
|
} ?: defaultValue
|
|
|
|
override fun getInt(key: ConfigKey, defaultValue: Int) = configurationMapping[key.key]?.let {
|
|
try {
|
|
it.toInt()
|
|
} catch (@Suppress("SwallowedException") e: NumberFormatException) {
|
|
// In the future, log coercion failure as this could mean someone made an error in the remote config console
|
|
defaultValue
|
|
}
|
|
} ?: defaultValue
|
|
|
|
override fun getString(key: ConfigKey, defaultValue: String) = configurationMapping.getOrElse(key.key) { defaultValue }
|
|
|
|
override fun hasKey(key: ConfigKey) = configurationMapping.containsKey(key.key)
|
|
}
|