Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.rxjava
- import org.funktionale.either.Either
- import rx.Observable
- data class ValidationError(val errorMsg: String)
- class Requirement(val msg: String, val isSatisfiable: (String) -> Boolean) {
- fun check(password: String) = if (isSatisfiable(password)) null
- else ValidationError(msg)
- }
- class PasswordValidator(val requirements: List<Requirement>) {
- constructor(vararg requirements: Requirement) : this(requirements.toList())
- fun validate(password: String): List<ValidationError> {
- return requirements
- .map { requirement -> requirement.check(password) }
- .filterNotNull()
- }
- }
- fun main(args: Array<String>) {
- val passwordValidator = PasswordValidator(
- Requirement("At least 4 characters") { it.length > 3 },
- Requirement("At least one character in lower case") { it.any(Char::isLowerCase) }
- )
- Observable.just("12Q")
- .map { pswd ->
- val errors = passwordValidator.validate(pswd)
- if (errors.isEmpty()) Either.right(pswd)
- else Either.left(errors)
- }
- .subscribe({ either -> either.fold(
- { errors -> println("Weak password: $errors") },
- { println("Strong password: $it") })
- },
- { it.printStackTrace() })
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement