Last active
April 7, 2017 09:55
-
-
Save dgouyette/6d09a5ce4a986455a93b63add5798f01 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import jto.validation.{Rule, VA} | |
import shapeless.Witness | |
import shapeless.labelled.{FieldType, field} | |
import shapeless._ | |
import scala.language.implicitConversions | |
trait Validator { | |
def rules: Rule[String, String] | |
def validate(value: String): VA[String] = rules.validate(value) | |
} | |
object EmailValidator extends Validator { | |
val rules: Rule[String, String] = Rules.email |+| Rules.notEmpty | |
} | |
object FirstnameValidator extends Validator { | |
override def rules: Rule[String, String] = Rules.minLength(3) | |
} | |
def validField(in: FieldType[T, String])(implicit witness: Witness.Aux[T]) = { | |
getFieldName(in) match { | |
case v: Validator => v.validate(in) | |
} | |
} | |
implicit def email(value: String) = field[EmailValidator.type](value) | |
implicit def firstname(value: String) = field[FirstnameValidator.type](value) | |
//implicit def cgu(value : String) = field[BooleanValidator.type](value) | |
//implicit def boolean(value : String) = field[BooleanValidator.type ](value) | |
def getFieldName[K, V](value: FieldType[K, V])(implicit witness: Witness.Aux[K]): K = witness.value | |
def getFieldValue[K, V](value: FieldType[K, V]): V = value | |
object validate extends Poly1 { | |
implicit def genericString[K <: Validator](implicit witness: Witness.Aux[K]) = at((x: FieldType[K, String]) => { | |
getFieldName(x).validate(getFieldValue(x)) | |
}) | |
} | |
validate(email("[email protected]")) | |
validate(email("invalid")) | |
validate(firstname("Da")) | |
validate(firstname("Damien")) | |
//validate(cgu("true")) | |
//validate(boolean("true")) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment