All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.wellfactored.playbindings.ValueClassUrlBinders.scala Maven / Gradle / Ivy

/*
 * Copyright 2016 Well-Factored Software Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.wellfactored.playbindings

import play.api.mvc.{PathBindable, QueryStringBindable}

trait ValueClassPathBindable extends ValueWrapperGen {
  implicit def valueClassPathBindable[W, V](implicit vw: ValueWrapper[W, V],
                                            binder: PathBindable[V]): PathBindable[W] =
    new PathBindable[W] {
      override def unbind(key: String, wrapper: W): String =
        binder.unbind(key, vw.unwrap(wrapper))

      override def bind(key: String, value: String): Either[String, W] =
        binder.bind(key, value).right.map(vw.wrap)
    }
}

trait ValueClassQueryStringBindable extends ValueWrapperGen {
  implicit def valueClassQueryStringBindable[W, V](implicit vw: ValueWrapper[W, V],
                                                   binder: QueryStringBindable[V]): QueryStringBindable[W] =
    new QueryStringBindable[W] {
      override def unbind(key: String, wrapper: W): String =
        binder.unbind(key, vw.unwrap(wrapper))

      override def bind(key: String, params: Map[String, Seq[String]]): Option[Either[String, W]] = {
        binder.bind(key, params).map(_.right.map(vw.wrap))
      }
    }
}

trait ValueClassUrlBinders extends ValueClassPathBindable with ValueClassQueryStringBindable

/**
  * `import ValueClassUrlBinders._` to get both the `ValueClassPathBindable` and `ValueClassQueryStringBindable`
  * generators in implicit scope. In particular, add this to your `build.sbt` to import them into
  * the routes file:
  *
  * `routesImport += "com.wellfactored.playbindings.ValueClassUrlBinders._"`
  */
object ValueClassUrlBinders extends ValueClassUrlBinders




© 2015 - 2024 Weber Informatics LLC | Privacy Policy