aboutsummaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
Diffstat (limited to 'core/src')
-rw-r--r--core/src/main/scala/com/softwaremill/sttp/UriInterpolator.scala32
-rw-r--r--core/src/main/scala/com/softwaremill/sttp/package.scala4
2 files changed, 20 insertions, 16 deletions
diff --git a/core/src/main/scala/com/softwaremill/sttp/UriInterpolator.scala b/core/src/main/scala/com/softwaremill/sttp/UriInterpolator.scala
index abb2327..e329630 100644
--- a/core/src/main/scala/com/softwaremill/sttp/UriInterpolator.scala
+++ b/core/src/main/scala/com/softwaremill/sttp/UriInterpolator.scala
@@ -1,6 +1,8 @@
package com.softwaremill.sttp
-// from https://gist.github.com/teigen/5865923
+import java.net.URI
+
+// based on https://gist.github.com/teigen/5865923
object UriInterpolator {
private val unreserved = {
@@ -9,24 +11,22 @@ object UriInterpolator {
alphanum ++ mark
}
- implicit class UriContext(val sc:StringContext) extends AnyVal {
- def uri(args:String*) = {
- val strings = sc.parts.iterator
- val expressions = args.iterator
- val sb = new StringBuffer(strings.next())
+ def interpolate(sc: StringContext, args: String*): URI = {
+ val strings = sc.parts.iterator
+ val expressions = args.iterator
+ val sb = new StringBuffer(strings.next())
- while(strings.hasNext){
- for(c <- expressions.next()){
- if(unreserved(c))
- sb.append(c)
- else for(b <- c.toString.getBytes("UTF-8")){
- sb.append("%")
- sb.append("%02X".format(b))
- }
+ while(strings.hasNext){
+ for(c <- expressions.next()){
+ if(unreserved(c))
+ sb.append(c)
+ else for(b <- c.toString.getBytes("UTF-8")){
+ sb.append("%")
+ sb.append("%02X".format(b))
}
- sb.append(strings.next())
}
- sb.toString
+ sb.append(strings.next())
}
+ new URI(sb.toString)
}
}
diff --git a/core/src/main/scala/com/softwaremill/sttp/package.scala b/core/src/main/scala/com/softwaremill/sttp/package.scala
index 52d06f0..3321aa7 100644
--- a/core/src/main/scala/com/softwaremill/sttp/package.scala
+++ b/core/src/main/scala/com/softwaremill/sttp/package.scala
@@ -178,4 +178,8 @@ package object sttp {
private val MultipartFormDataContentType = "multipart/form-data"
private def contentTypeWithEncoding(ct: String, enc: String) = s"$ct; charset=$enc"
+
+ implicit class UriContext(val sc: StringContext) extends AnyVal {
+ def uri(args:String*): URI = UriInterpolator.interpolate(sc, args: _*)
+ }
}