Skip to content

Instantly share code, notes, and snippets.

@jlandahl
Last active December 21, 2015 23:29
Show Gist options
  • Save jlandahl/6383084 to your computer and use it in GitHub Desktop.
Save jlandahl/6383084 to your computer and use it in GitHub Desktop.
case class Parameters(userId: UserId,
device: Option[Device] = None,
additionalParameters: Map[String, Iterable[String]] = Map.empty) {
def getParameter[T](name: String, default: T)(implicit converter: (Iterable[String]) => Option[T]): T = {
additionalParameters.get(name).flatMap(converter).getOrElse(default)
}
}
object Parameters {
implicit val strings2Int = (values: Iterable[String]) => {
import scala.util.control.Exception.catching
catching(classOf[NumberFormatException]) opt values.head.trim.toInt
}
}
case class Parameters(userId: UserId,
device: Option[Device] = None,
additionalParameters: Map[String, Iterable[String]] = Map.empty) {
def getParameter[T](name: String, default: T)(implicit converter: SafeConverter[Iterable[String], T]): T = {
additionalParameters.get(name).flatMap(converter.convert).getOrElse(default)
}
}
case class SafeConverter[A, B](val convert: A => Option[B]) extends AnyVal
object SafeConverter {
implicit val strings2Int = SafeConverter((values: Iterable[String]) => {
import scala.util.control.Exception.catching
catching(classOf[NumberFormatException]) opt values.head.trim.toInt
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment