
urldsl.url.UrlStringGenerator.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of url-dsl_2.12 Show documentation
Show all versions of url-dsl_2.12 Show documentation
A tiny library for parsing and creating urls in a type-safe way
The newest version!
package urldsl.url
import urldsl.vocabulary.{MaybeFragment, Param, Segment}
trait UrlStringGenerator {
def encode(str: String, encoding: String = "utf-8"): String
def makePath(segments: List[Segment]): String =
segments.map(_.content).map(encode(_)).filter(_.nonEmpty).mkString("/")
final def makeParamsMap(params: Map[String, Param]): Map[String, List[String]] =
params
.map { case (key, value) => key -> value.content.map(encode(_)) }
final def makeParams(params: Map[String, Param]): String =
makeParamsMap(params)
.flatMap { case (key, values) => values.map(value => s"$key=$value") }
.mkString("&")
final def makeUrl(segments: List[Segment], params: Map[String, Param]): String = {
val paramsString = makeParams(params)
val pathString = makePath(segments)
pathString ++ (if (paramsString.nonEmpty) "?" else "") ++ paramsString
}
final def makeFragment(maybeFragment: MaybeFragment): String = maybeFragment.value match {
case Some("") => ""
case Some(value) => "#" ++ encode(value)
case None => ""
}
}
object UrlStringGenerator extends DefaultUrlStringGenerator {
val default: UrlStringGenerator = default0
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy