@@ -3,6 +3,7 @@ import io
3
3
import io/error
4
4
import stringbuffer
5
5
import bytearray
6
+ import io/uri
6
7
7
8
// Async iterables
8
9
// ---------------
@@ -273,6 +274,27 @@ namespace jsWeb {
273
274
}
274
275
}
275
276
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
+
276
298
namespace internal {
277
299
extern pure def backend(): String =
278
300
jsNode { "js-node" }
@@ -288,11 +310,13 @@ def request[R]{ body: => Unit / RequestBuilder }{ res: {ResponseReader} => R }:
288
310
namespace example {
289
311
def main() = {
290
312
with on[RequestError].panic
313
+ with on[WrongFormat].panic
291
314
with def res = request{
292
315
do method(GET())
293
- do hostname("effekt-lang.org")
316
+ uri("https://effekt-lang.org/")
317
+ //do hostname("effekt-lang.org")
294
318
//do header("user-agent", "Effekt/script") // dont use this on js-web
295
- do path("/")
319
+ // do path("/")
296
320
// do port(443) // optional
297
321
}
298
322
if(res.status() == 200){
0 commit comments