package co.electriccoin.zcash.configuration.model.entry /** * Defines a configuration key. * * Different configuration providers have unique restrictions on keys. This attempts to find a * least common denominator with some reasonable limits on what the keys can contain. */ @JvmInline value class ConfigKey(val key: String) { init { requireKeyConstraints(key) } companion object { private const val MIN_KEY_LENGTH = 1 private const val MAX_KEY_LENGTH = 256 private val REGEX = Regex("[a-zA-Z0-9_]*") /** * Checks a configuration key against known constraints. * * @param key Key to check. */ private fun requireKeyConstraints(key: String) { require(key.length in 1..MAX_KEY_LENGTH) { "Invalid key $key. Length (${key.length}) is not in the range [$MIN_KEY_LENGTH, $MAX_KEY_LENGTH]." } // This is a Firebase requirement require(!key.first().isDigit()) { "Invalid key $key. Key must not start with a number." } require(REGEX.matches(key)) { "Invalid key $key. Key must contain only letter and numbers." } } } }