25 lines
705 B
Kotlin
25 lines
705 B
Kotlin
package cash.z.ecc.android.sdk.demoapp.model
|
|
|
|
import cash.z.ecc.android.sdk.demoapp.ext.sizeInUtf8Bytes
|
|
|
|
@JvmInline
|
|
value class Memo(val value: String) {
|
|
init {
|
|
require(isWithinMaxLength(value)) {
|
|
"Memo length in bytes must be less than $MAX_MEMO_LENGTH_BYTES but " +
|
|
"actually has length ${value.sizeInUtf8Bytes()}"
|
|
}
|
|
}
|
|
|
|
companion object {
|
|
/**
|
|
* The decoded memo contents MUST NOT exceed 512 bytes.
|
|
*
|
|
* https://zips.z.cash/zip-0321
|
|
*/
|
|
private const val MAX_MEMO_LENGTH_BYTES = 512
|
|
|
|
fun isWithinMaxLength(memoString: String) = memoString.sizeInUtf8Bytes() <= MAX_MEMO_LENGTH_BYTES
|
|
}
|
|
}
|