zcash-android-wallet-sdk/demo-app/src/main/java/cash/z/ecc/android/sdk/demoapp/preference/model/entry/Key.kt

35 lines
1.1 KiB
Kotlin

package cash.z.ecc.android.sdk.demoapp.preference.model.entry
/**
* Defines a preference key.
*
* Different preference providers may 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 Key(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_]*") // $NON-NLS
/**
* Checks a preference 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}) should be [$MIN_KEY_LENGTH, $MAX_KEY_LENGTH]." // $NON-NLS
}
require(REGEX.matches(key)) { "Invalid key $key. Key must contain only letter and numbers." } // $NON-NLS
}
}
}