diff --git a/tribune-core/src/main/kotlin/com/sksamuel/tribune/core/strings/strings.kt b/tribune-core/src/main/kotlin/com/sksamuel/tribune/core/strings/strings.kt index ee2f7cf..1776c8b 100644 --- a/tribune-core/src/main/kotlin/com/sksamuel/tribune/core/strings/strings.kt +++ b/tribune-core/src/main/kotlin/com/sksamuel/tribune/core/strings/strings.kt @@ -7,6 +7,7 @@ import com.sksamuel.tribune.core.Parser import com.sksamuel.tribune.core.filter import com.sksamuel.tribune.core.flatMap import com.sksamuel.tribune.core.map +import com.sksamuel.tribune.core.mapIfNotNull /** * Modifies the output of a String producing [Parser] by trimming the output string @@ -16,6 +17,15 @@ import com.sksamuel.tribune.core.map */ fun Parser.trim(): Parser = map { it.trim() } +/** + * Modifies the output of a nullable String producing [Parser] by trimming the output string + * to remove prefix and suffix whitespace. + * + * @return the output of the underlying parser with whitespace trimmed. + */ +@JvmName("trimOnNullableString") +fun Parser.trim(): Parser = mapIfNotNull { it.trim() } + /** * Modifies the output of a String producing [Parser] to strip the given [chars]. */ diff --git a/tribune-core/src/test/kotlin/com/sksamuel/tribune/core/strings.kt b/tribune-core/src/test/kotlin/com/sksamuel/tribune/core/strings.kt index bff86b1..06ccc26 100644 --- a/tribune-core/src/test/kotlin/com/sksamuel/tribune/core/strings.kt +++ b/tribune-core/src/test/kotlin/com/sksamuel/tribune/core/strings.kt @@ -71,6 +71,13 @@ class StringTest : FunSpec() { p.parse("abc ") shouldBe Foo("abc").right() } + test("trim on nullable") { + val p = Parser().trim() + p.parse(" abcd ") shouldBe "abcd".right() + p.parse("abc ") shouldBe "abc".right() + p.parse(null) shouldBe null.right() + } + test("uppercase") { val p = Parser().toUppercase().map { Foo(it) } p.parse("abcd") shouldBe Foo("ABCD").right()