Skip to content

Latest commit

 

History

History
38 lines (31 loc) · 1.27 KB

File metadata and controls

38 lines (31 loc) · 1.27 KB
val someObject = SomeObj( a = 1, b = "2", c = UUID.randomUUID(), d = SomeOtherObj(i = 1, k = "2"))

// how to validate?

// validate object itself
val validated: Validated<String> = validateSelf("abc").isNotBlank().hasSize(3)

// validate object inner state
val validated: Validated<SomeObj> = validate<SomeObj>(someObject) {
    // validation by values
    validateVal(value = this.a, propName = "a").positive().lessThan(2)
    validateVal(value = this.b, propName = "b").isNotBlank().hasSize(3)
    validateVal(value = this.c, propName = "c").isUUID()
    // validation by property
    validateProp(SomeObj::a).isPositive()
    // validation by property
    validateFunc(func = SomeObj::getA, propName = {KCallable.getSimpleName.}).isPositive()
    // nested object validation
    validateObj<SomeOtherObj>(this.d) {
        validVal(this.i).isPositive()
        validVal(this.k).isNotEmpty().contains("2")
    }
    // validate some iterable
    validateIterable<SomeOtherObj>(this)
}

// how to handle validation?

// throw ConstraintViolationException
validated.throwIfInvalid()

// to kotlin.Result<SomeObj> or ConstraintViolationException as failure
validated.toResult()

// to com.github.michaelbull.result.Result<SomeObj, ConstraintViolationException>
validated.toEitherResult()