From a496d2b074ef4c4d9f9936d59c54a54f2571a35b Mon Sep 17 00:00:00 2001 From: ArtRand Date: Fri, 9 Feb 2018 14:36:08 -0800 Subject: added valid or empty semantics --- src/main/scala/xyz/driver/core/database/Converters.scala | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src') 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 + } } -- cgit v1.2.3