object Bindables {
  import play.api.mvc.QueryStringBindable
  import play.api.mvc.PathBindable
  import apidocreferenceapi.models._

  private val enumAgeGroupNotFound = (key: String, e: Exception) => s"Unrecognized $key, should be one of ${AgeGroup.all.mkString(", ")}"

  implicit val pathBindableEnumAgeGroup = new PathBindable.Parsing[AgeGroup] (
    AgeGroup.fromString(_).get, _.toString, enumAgeGroupNotFound
  )

  implicit val queryStringBindableEnumAgeGroup = new QueryStringBindable.Parsing[AgeGroup](
    AgeGroup.fromString(_).get, _.toString, enumAgeGroupNotFound
  )

}

object Bindables {
  import play.api.mvc.QueryStringBindable
  import play.api.mvc.PathBindable
  import org.joda.time.{DateTime, LocalDate}
  import org.joda.time.format.ISODateTimeFormat
  import apidocreferenceapi.models._

  // Type: date-time-iso8601
  implicit val pathBindableTypeDateTimeIso8601 = new PathBindable.Parsing[DateTime](
    ISODateTimeFormat.dateTimeParser.parseDateTime(_), _.toString, (key: String, e: Exception) => s"Error parsing date time $key. Example: 2014-04-29T11:56:52Z"
  )

  // Type: date-iso8601
  implicit val pathBindableTypeDateTimeIso8601 = new PathBindable.Parsing[LocalDate](
    ISODateTimeFormat.yearMonthDay.parseLocalDate(_), _.toString, (key: String, e: Exception) => s"Error parsing date time $key. Example: 2014-04-29"
  )

  // Enum: AgeGroup
  private val enumAgeGroupNotFound = (key: String, e: Exception) => s"Unrecognized $key, should be one of ${AgeGroup.all.mkString(", ")}"

  implicit val pathBindableEnumAgeGroup = new PathBindable.Parsing[AgeGroup] (
    AgeGroup.fromString(_).get, _.toString, enumAgeGroupNotFound
  )

  implicit val queryStringBindableEnumAgeGroup = new QueryStringBindable.Parsing[AgeGroup](
    AgeGroup.fromString(_).get, _.toString, enumAgeGroupNotFound
  )

}

Add date bindables to core binadble object
Add date bindables to core binadble object
