package co.electriccoin.zcash.configuration.model.map import co.electriccoin.zcash.configuration.model.entry.ConfigKey import kotlinx.datetime.Instant /** * An immutable snapshot of a key-value configuration. */ interface Configuration { /** * @return When the configuration was updated. Null indicates the configuration either doesn't refresh or has never been refreshed. */ val updatedAt: Instant? /** * @param key Key to check. * @return True if a mapping for `key` exists. */ fun hasKey(key: ConfigKey): Boolean /** * @param key Key to use to retrieve the value. * @param defaultValue Value to use if `key` doesn't exist in the * configuration. Some implementations may not use strong types, and the default can also * be returned if type coercion fails. * @return boolean mapping for `key` or `defaultValue`. */ fun getBoolean(key: ConfigKey, defaultValue: Boolean): Boolean /** * @param key Key to use to retrieve the value. * @param defaultValue Value to use if `key` doesn't exist in the * configuration. Some implementations may not use strong types, and the default can also * be returned if type coercion fails. * @return int mapping for `key` or `defaultValue`. */ fun getInt(key: ConfigKey, defaultValue: Int): Int /** * @param key Key to use to retrieve the value. * @param defaultValue Value to use if `key` doesn't exist in the * configuration. Some implementations may not use strong types, and the default can also * be returned if type coercion fails. * @return String mapping for `key` or `defaultValue`. */ fun getString(key: ConfigKey, defaultValue: String): String }