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, 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) }