From 4e2e77238957d7732326cfe5e05145bf7dab5bfb Mon Sep 17 00:00:00 2001 From: Sculas Date: Tue, 2 Aug 2022 22:00:10 +0200 Subject: [PATCH] feat: validator for patch options --- .../app/revanced/patcher/patch/PatchOption.kt | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/app/revanced/patcher/patch/PatchOption.kt b/src/main/kotlin/app/revanced/patcher/patch/PatchOption.kt index c61effed..728d5878 100644 --- a/src/main/kotlin/app/revanced/patcher/patch/PatchOption.kt +++ b/src/main/kotlin/app/revanced/patcher/patch/PatchOption.kt @@ -55,9 +55,16 @@ sealed class PatchOption( default: T?, val title: String, val description: String, - val required: Boolean + val required: Boolean, + val validator: (T?) -> Boolean ) { var value: T? = default + set(value) { + if (!validator(value)) { + throw IllegalArgumentException("Illegal value: $value") + } + field = value + } /** * A [PatchOption] representing a [String]. @@ -68,9 +75,10 @@ sealed class PatchOption( default: String?, title: String, description: String, - required: Boolean = false + required: Boolean = false, + validator: (String?) -> Boolean = { true } ) : PatchOption( - key, default, title, description, required + key, default, title, description, required, validator ) /** @@ -82,9 +90,10 @@ sealed class PatchOption( default: Boolean?, title: String, description: String, - required: Boolean = false + required: Boolean = false, + validator: (Boolean?) -> Boolean = { true } ) : PatchOption( - key, default, title, description, required + key, default, title, description, required, validator ) /** @@ -98,9 +107,12 @@ sealed class PatchOption( val options: Iterable, title: String, description: String, - required: Boolean = false + required: Boolean = false, + validator: (E?) -> Boolean = { true } ) : PatchOption( - key, default, title, description, required + key, default, title, description, required, { + (it?.let { it in options } ?: true) && validator(it) + } ) { init { if (default !in options) { @@ -119,9 +131,10 @@ sealed class PatchOption( options: Iterable, title: String, description: String, - required: Boolean = false + required: Boolean = false, + validator: (String?) -> Boolean = { true } ) : ListOption( - key, default, options, title, description, required + key, default, options, title, description, required, validator ) /** @@ -134,8 +147,9 @@ sealed class PatchOption( options: Iterable, title: String, description: String, - required: Boolean = false + required: Boolean = false, + validator: (Int?) -> Boolean = { true } ) : ListOption( - key, default, options, title, description, required + key, default, options, title, description, required, validator ) } \ No newline at end of file