diff options
author | vlad <vlad@driver.xyz> | 2017-06-13 16:12:20 -0700 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2017-06-13 16:12:20 -0700 |
commit | cd1b635b2ae90d9ac2d8b1779183a1fbd8c5fd5c (patch) | |
tree | 062e8dad1a1513e26b0fd08b1742d6ff2ee874f7 /src/main/scala/xyz/driver/pdsuicommon/validation | |
parent | 0000a65ab4479a2a40e2d6468036438e9705b4aa (diff) | |
download | rest-query-cd1b635b2ae90d9ac2d8b1779183a1fbd8c5fd5c.tar.gz rest-query-cd1b635b2ae90d9ac2d8b1779183a1fbd8c5fd5c.tar.bz2 rest-query-cd1b635b2ae90d9ac2d8b1779183a1fbd8c5fd5c.zip |
Adding domain entitiesv0.1.0
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuicommon/validation')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuicommon/validation/ValidationError.scala | 3 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/pdsuicommon/validation/Validators.scala | 40 |
2 files changed, 43 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/validation/ValidationError.scala b/src/main/scala/xyz/driver/pdsuicommon/validation/ValidationError.scala new file mode 100644 index 0000000..9f466f8 --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuicommon/validation/ValidationError.scala @@ -0,0 +1,3 @@ +package xyz.driver.pdsuicommon.validation + +final case class ValidationError(message: String) diff --git a/src/main/scala/xyz/driver/pdsuicommon/validation/Validators.scala b/src/main/scala/xyz/driver/pdsuicommon/validation/Validators.scala new file mode 100644 index 0000000..5dd244e --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuicommon/validation/Validators.scala @@ -0,0 +1,40 @@ +package xyz.driver.pdsuicommon.validation + +import xyz.driver.pdsuicommon.logging._ +import xyz.driver.pdsuicommon.utils.JsonSerializer + +import scala.util.control.NonFatal + +object Validators extends PhiLogging { + + type Validator[Input, Refined] = Input => Either[ValidationError, Refined] + + def generic[T, R](message: String)(f: PartialFunction[T, R]): Validator[T, R] = { value => + if (f.isDefinedAt(value)) Right(f(value)) + else Left(ValidationError(message)) + } + + def nonEmpty[T](field: String): Validator[Option[T], T] = generic(s"$field is empty") { + case Some(x) => x + } + + def nonEmptyString(field: String): Validator[String, String] = generic(s"$field is empty") { + case x if x.nonEmpty => x + } + + def deserializableTo[Refined](field: String) + (value: String) + (implicit m: Manifest[Refined]): Either[ValidationError, Refined] = { + try { + Right(JsonSerializer.deserialize[Refined](value)) + } catch { + case NonFatal(e) => + logger.error(phi"Can not deserialize the ${Unsafe(field)}: $e") + Left(ValidationError(s"$field is invalid")) + } + } + + def success[T](result: T): Either[Nothing, T] = Right(result) + + def fail(message: String): Either[ValidationError, Nothing] = Left(ValidationError(message)) +} |