Skip to content

Commit 729aef7

Browse files
authored
Merge pull request #57 from bargergo/string-length-validators
Add validators for strings
2 parents 10f49e3 + 5874a1f commit 729aef7

27 files changed

+315
-27
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.papsign.ktor.openapigen.annotations.type.common
2+
3+
import java.lang.Exception
4+
5+
abstract class ConstraintViolation(defaultMessage: String, message: String = "", cause: Throwable? = null)
6+
: Exception(if (message.isEmpty()) defaultMessage else message, cause)

src/main/kotlin/com/papsign/ktor/openapigen/annotations/type/number/NumberConstraintProcessor.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.papsign.ktor.openapigen.annotations.type.number
22

3+
import com.papsign.ktor.openapigen.annotations.type.common.ConstraintViolation
34
import com.papsign.ktor.openapigen.classLogger
45
import com.papsign.ktor.openapigen.model.schema.SchemaModel
56
import com.papsign.ktor.openapigen.schema.processor.SchemaProcessor
67
import com.papsign.ktor.openapigen.validation.Validator
78
import com.papsign.ktor.openapigen.validation.ValidatorBuilder
8-
import java.lang.Exception
99
import java.math.BigDecimal
1010
import kotlin.reflect.KType
1111
import kotlin.reflect.full.withNullability
@@ -59,11 +59,9 @@ abstract class NumberConstraintProcessor<A: Annotation>(allowedTypes: Iterable<K
5959
}
6060
}
6161

62-
data class NumberConstraint(val min: BigDecimal? = null, val max: BigDecimal? = null, val minInclusive: Boolean = true, val maxInclusive: Boolean = true)
62+
data class NumberConstraint(val min: BigDecimal? = null, val max: BigDecimal? = null, val minInclusive: Boolean = true, val maxInclusive: Boolean = true, val errorMessage: String)
6363

64-
open class ConstraintVialoation(message: String, cause: Throwable? = null): Exception(message, cause)
65-
66-
class NumberConstraintViolation(val actual: Number?, val constraint: NumberConstraint): ConstraintVialoation("Constraint violation: $actual should be ${
64+
class NumberConstraintViolation(val actual: Number?, val constraint: NumberConstraint): ConstraintViolation("Constraint violation: $actual should be ${
6765
{
6866
val min = "${constraint.min} ${if (constraint.minInclusive) "inclusive" else "exclusive"}"
6967
val max = "${constraint.max} ${if (constraint.maxInclusive) "inclusive" else "exclusive"}"
@@ -74,6 +72,6 @@ class NumberConstraintViolation(val actual: Number?, val constraint: NumberConst
7472
else -> "anything"
7573
}
7674
}()
77-
}")
75+
}", constraint.errorMessage)
7876

79-
class NotANumberViolationViolation(val value: Any?): ConstraintVialoation("Constraint violation: $value is not a number")
77+
class NotANumberViolationViolation(val value: Any?): ConstraintViolation("Constraint violation: $value is not a number")

src/main/kotlin/com/papsign/ktor/openapigen/annotations/type/number/floating/clamp/FClamp.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ import com.papsign.ktor.openapigen.validation.ValidatorAnnotation
66
@Target(AnnotationTarget.TYPE, AnnotationTarget.PROPERTY)
77
@SchemaProcessorAnnotation(FClampProcessor::class)
88
@ValidatorAnnotation(FClampProcessor::class)
9-
annotation class FClamp(val min: Double, val max: Double)
9+
annotation class FClamp(val min: Double, val max: Double, val errorMessage: String = "")
1010

1111

src/main/kotlin/com/papsign/ktor/openapigen/annotations/type/number/floating/clamp/FClampProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ object FClampProcessor : FloatingNumberConstraintProcessor<FClamp>() {
1818
}
1919

2020
override fun getConstraint(annotation: FClamp): NumberConstraint {
21-
return NumberConstraint(BigDecimal(annotation.min), BigDecimal(annotation.max))
21+
return NumberConstraint(BigDecimal(annotation.min), BigDecimal(annotation.max), errorMessage = annotation.errorMessage)
2222
}
2323
}

src/main/kotlin/com/papsign/ktor/openapigen/annotations/type/number/floating/max/FMax.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ import com.papsign.ktor.openapigen.validation.ValidatorAnnotation
66
@Target(AnnotationTarget.TYPE, AnnotationTarget.PROPERTY)
77
@SchemaProcessorAnnotation(FMaxProcessor::class)
88
@ValidatorAnnotation(FMaxProcessor::class)
9-
annotation class FMax(val value: Double)
9+
annotation class FMax(val value: Double, val errorMessage: String = "")

src/main/kotlin/com/papsign/ktor/openapigen/annotations/type/number/floating/max/FMaxProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ object FMaxProcessor: FloatingNumberConstraintProcessor<FMax>() {
1616
}
1717
}
1818
override fun getConstraint(annotation: FMax): NumberConstraint {
19-
return NumberConstraint(max= BigDecimal(annotation.value))
19+
return NumberConstraint(max= BigDecimal(annotation.value), errorMessage = annotation.errorMessage)
2020
}
2121
}

src/main/kotlin/com/papsign/ktor/openapigen/annotations/type/number/floating/min/FMin.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ import com.papsign.ktor.openapigen.validation.ValidatorAnnotation
66
@Target(AnnotationTarget.TYPE, AnnotationTarget.PROPERTY)
77
@SchemaProcessorAnnotation(FMinProcessor::class)
88
@ValidatorAnnotation(FMinProcessor::class)
9-
annotation class FMin(val value: Double)
9+
annotation class FMin(val value: Double, val errorMessage: String = "")

src/main/kotlin/com/papsign/ktor/openapigen/annotations/type/number/floating/min/FMinProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ object FMinProcessor: FloatingNumberConstraintProcessor<FMin>() {
1717
}
1818

1919
override fun getConstraint(annotation: FMin): NumberConstraint {
20-
return NumberConstraint(min = BigDecimal(annotation.value))
20+
return NumberConstraint(min = BigDecimal(annotation.value), errorMessage = annotation.errorMessage)
2121
}
2222
}

src/main/kotlin/com/papsign/ktor/openapigen/annotations/type/number/integer/clamp/Clamp.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ import com.papsign.ktor.openapigen.validation.ValidatorAnnotation
66
@Target(AnnotationTarget.TYPE, AnnotationTarget.PROPERTY)
77
@SchemaProcessorAnnotation(ClampProcessor::class)
88
@ValidatorAnnotation(ClampProcessor::class)
9-
annotation class Clamp(val min: Long, val max: Long)
9+
annotation class Clamp(val min: Long, val max: Long, val errorMessage: String = "")

src/main/kotlin/com/papsign/ktor/openapigen/annotations/type/number/integer/clamp/ClampProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ object ClampProcessor: IntegerNumberConstraintProcessor<Clamp>() {
1818
}
1919

2020
override fun getConstraint(annotation: Clamp): NumberConstraint {
21-
return NumberConstraint(BigDecimal(annotation.min), BigDecimal(annotation.max))
21+
return NumberConstraint(BigDecimal(annotation.min), BigDecimal(annotation.max), errorMessage = annotation.errorMessage)
2222
}
2323
}

0 commit comments

Comments
 (0)