io.fintrospect.parameters.Binding.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fintrospect_2.10 Show documentation
Show all versions of fintrospect_2.10 Show documentation
Library that adds self-documentation to Finagle server endpoint services
package io.fintrospect.parameters
import com.twitter.finagle.http.Request
import scala.language.existentials
/**
* Represents the binding of a parameter to it's value in a particular context
*/
sealed trait Binding {
val parameter: Parameter
def apply(requestBuild: RequestBuilder): RequestBuilder
}
class QueryBinding(val parameter: Parameter, value: String) extends Binding {
def apply(requestBuild: RequestBuilder) = {
val newValues = value +: requestBuild.queries.getOrElse(parameter.name, Nil)
requestBuild.copy(queries = requestBuild.queries + (parameter.name -> newValues))
}
}
class PathBinding(val parameter: Parameter, value: String) extends Binding {
def apply(requestBuild: RequestBuilder) = requestBuild.copy(uriParts = requestBuild.uriParts :+ value)
}
class RequestBinding(val parameter: Parameter, into: Request => Request) extends Binding {
def apply(requestBuild: RequestBuilder) = requestBuild.copy(fn = requestBuild.fn.andThen(into))
}
class FormFieldBinding(val parameter: Parameter, value: String) extends Binding {
def apply(requestBuild: RequestBuilder) = requestBuild
def apply(form: Form) = form +(parameter.name, value)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy