aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtRand <arand@soe.ucsc.edu>2018-02-09 14:36:08 -0800
committerArtRand <arand@soe.ucsc.edu>2018-02-09 14:36:08 -0800
commita496d2b074ef4c4d9f9936d59c54a54f2571a35b (patch)
treec96e5d0dc50846acfee256882ebec43723b67a5a
parent574fbd72cea70a289c9c692edfa60511c243b9f4 (diff)
downloaddriver-core-a496d2b074ef4c4d9f9936d59c54a54f2571a35b.tar.gz
driver-core-a496d2b074ef4c4d9f9936d59c54a54f2571a35b.tar.bz2
driver-core-a496d2b074ef4c4d9f9936d59c54a54f2571a35b.zip
added valid or empty semantics
-rw-r--r--src/main/scala/xyz/driver/core/database/Converters.scala12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/main/scala/xyz/driver/core/database/Converters.scala b/src/main/scala/xyz/driver/core/database/Converters.scala
index 6faf627..1a40c45 100644
--- a/src/main/scala/xyz/driver/core/database/Converters.scala
+++ b/src/main/scala/xyz/driver/core/database/Converters.scala
@@ -4,6 +4,9 @@ import xyz.driver.core.rest.errors.DatabaseException
import scala.reflect.ClassTag
+/**
+ * Helper methods for converting between table rows and Scala objects
+ */
trait Converters {
def fromStringOrThrow[ADT](entityStr: String, mapper: (String => Option[ADT]), entityName: String): ADT =
mapper(entityStr).getOrElse(throw DatabaseException(s"Invalid $entityName in database: $entityStr"))
@@ -11,8 +14,13 @@ trait Converters {
def expectValid[ADT](mapper: String => Option[ADT], query: String)(implicit ct: ClassTag[ADT]): ADT =
fromStringOrThrow[ADT](query, mapper, ct.toString())
- def expectExistsAndValid[ADT](mapper: String => Option[ADT], query: Option[String], contextMsg: String = "")(
- implicit ct: ClassTag[ADT]): ADT = {
+ def expectExistsAndValid[ADT](mapper: String => Option[ADT], query: Option[String], contextMsg: String = "")
+ (implicit ct: ClassTag[ADT]): ADT = {
expectValid[ADT](mapper, query.getOrElse(throw DatabaseException(contextMsg)))
}
+
+ def expectValidOrEmpty[ADT](mapper: String => Option[ADT], query: Option[String], contextMsg: String = "")
+ (implicit ct: ClassTag[ADT]): Option[ADT] = {
+ if (query.isDefined) Some(expectValid[ADT](mapper, query.get)) else None
+ }
}