Skip to content

Instantly share code, notes, and snippets.

@PromanSEW
Last active April 16, 2021 10:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save PromanSEW/84b929a0672fa132ae71078f1848d6ff to your computer and use it in GitHub Desktop.
Save PromanSEW/84b929a0672fa132ae71078f1848d6ff to your computer and use it in GitHub Desktop.
package util
import play.api.mvc.QueryStringBindable
import java.util.{OptionalDouble, OptionalInt, OptionalLong}
import scala.compat.java8.OptionConverters.{RichOptionalDouble, RichOptionalInt, RichOptionalLong}
object OptionalBinders {
/**
* QueryString binder for Java OptionalInt.
*/
implicit object bindableJavaOptionalInt extends QueryStringBindable[OptionalInt] {
def bind(key: String, params: Map[String, Seq[String]]) = {
Some(
implicitly[QueryStringBindable[Int]]
.bind(key, params)
.map(_.right.map(OptionalInt.of))
.getOrElse(Right(OptionalInt.empty))
)
}
def unbind(key: String, value: OptionalInt) = value.asScala.getOrElse(0).toString
}
/**
* QueryString binder for Java OptionalLong.
*/
implicit object bindableJavaOptionalLong extends QueryStringBindable[OptionalLong] {
def bind(key: String, params: Map[String, Seq[String]]) = {
Some(
implicitly[QueryStringBindable[Long]]
.bind(key, params)
.map(_.right.map(OptionalLong.of))
.getOrElse(Right(OptionalLong.empty))
)
}
def unbind(key: String, value: OptionalLong) = value.asScala.getOrElse(0).toString
}
/**
* QueryString binder for Java OptionalDouble.
*/
implicit object bindableJavaOptionalDouble extends QueryStringBindable[OptionalDouble] {
def bind(key: String, params: Map[String, Seq[String]]) = {
Some(
implicitly[QueryStringBindable[Double]]
.bind(key, params)
.map(_.right.map(OptionalDouble.of))
.getOrElse(Right(OptionalDouble.empty))
)
}
def unbind(key: String, value: OptionalDouble) = value.asScala.getOrElse(0).toString
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment