Skip to content

Commit 903dd2f

Browse files
Allow providing URI string instead of separate hostname and path
1 parent dfaff24 commit 903dd2f

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

libraries/common/io/requests.effekt

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import io
33
import io/error
44
import stringbuffer
55
import bytearray
6+
import io/uri
67

78
// Async iterables
89
// ---------------
@@ -273,6 +274,27 @@ namespace jsWeb {
273274
}
274275
}
275276

277+
def uri(uri: String): Unit / { RequestBuilder, Exception[WrongFormat] } = {
278+
stringBuffer{
279+
try parseURI(uri) with URIBuilder {
280+
def scheme(sc) = resume(sc match {
281+
case "http" => do protocol(HTTP())
282+
case "HTTP" => do protocol(HTTP())
283+
case "https" => do protocol(HTTPS())
284+
case "HTTPS" => do protocol(HTTPS())
285+
case _ => do raise(WrongFormat(), "Unsupported protocol " ++ sc)
286+
})
287+
def userinfo(u) = <>
288+
def host(h) = resume(do hostname(h))
289+
def port(p) = resume(do port(p))
290+
def path(p) = resume(do write(p))
291+
def query(q) = { do write("?"); do write(q); resume(()) }
292+
def fragment(f) = { do write("#"); do write(f); resume(()) }
293+
}
294+
do path(do flush())
295+
}
296+
}
297+
276298
namespace internal {
277299
extern pure def backend(): String =
278300
jsNode { "js-node" }
@@ -288,11 +310,13 @@ def request[R]{ body: => Unit / RequestBuilder }{ res: {ResponseReader} => R }:
288310
namespace example {
289311
def main() = {
290312
with on[RequestError].panic
313+
with on[WrongFormat].panic
291314
with def res = request{
292315
do method(GET())
293-
do hostname("effekt-lang.org")
316+
uri("https://effekt-lang.org/")
317+
//do hostname("effekt-lang.org")
294318
//do header("user-agent", "Effekt/script") // dont use this on js-web
295-
do path("/")
319+
//do path("/")
296320
// do port(443) // optional
297321
}
298322
if(res.status() == 200){

0 commit comments

Comments
 (0)