aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuicommon/validation/Validators.scala
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-06-13 16:12:20 -0700
committervlad <vlad@driver.xyz>2017-06-13 16:12:20 -0700
commitcd1b635b2ae90d9ac2d8b1779183a1fbd8c5fd5c (patch)
tree062e8dad1a1513e26b0fd08b1742d6ff2ee874f7 /src/main/scala/xyz/driver/pdsuicommon/validation/Validators.scala
parent0000a65ab4479a2a40e2d6468036438e9705b4aa (diff)
downloadrest-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/Validators.scala')
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/validation/Validators.scala40
1 files changed, 40 insertions, 0 deletions
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))
+}