diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/library/lux.lux | 3 | ||||
-rw-r--r-- | stdlib/source/library/lux/control/concurrency/csp.lux (renamed from stdlib/source/library/lux/control/concurrency/cps.lux) | 0 | ||||
-rw-r--r-- | stdlib/source/library/lux/ffi.jvm.lux | 2 | ||||
-rw-r--r-- | stdlib/source/library/lux/ffi.old.lux | 2 | ||||
-rw-r--r-- | stdlib/source/library/lux/meta/target/jvm/constant.lux | 2 | ||||
-rw-r--r-- | stdlib/source/library/lux/meta/target/jvm/constant/pool.lux | 2 | ||||
-rw-r--r-- | stdlib/source/library/lux/world/net/http.lux | 22 | ||||
-rw-r--r-- | stdlib/source/library/lux/world/net/http/client.lux | 11 | ||||
-rw-r--r-- | stdlib/source/library/lux/world/net/http/header.lux | 78 | ||||
-rw-r--r-- | stdlib/source/library/lux/world/net/http/mime.lux | 22 | ||||
-rw-r--r-- | stdlib/source/library/lux/world/net/http/status.lux | 6 |
11 files changed, 100 insertions, 50 deletions
diff --git a/stdlib/source/library/lux.lux b/stdlib/source/library/lux.lux index af8942f2e..e6aae9218 100644 --- a/stdlib/source/library/lux.lux +++ b/stdlib/source/library/lux.lux @@ -5830,3 +5830,6 @@ [Generation] [Declaration] ) + +(type .public F64 Frac) +(type .public Double Frac) diff --git a/stdlib/source/library/lux/control/concurrency/cps.lux b/stdlib/source/library/lux/control/concurrency/csp.lux index f8cd41a77..f8cd41a77 100644 --- a/stdlib/source/library/lux/control/concurrency/cps.lux +++ b/stdlib/source/library/lux/control/concurrency/csp.lux diff --git a/stdlib/source/library/lux/ffi.jvm.lux b/stdlib/source/library/lux/ffi.jvm.lux index 0f704a0cb..8db8186a6 100644 --- a/stdlib/source/library/lux/ffi.jvm.lux +++ b/stdlib/source/library/lux/ffi.jvm.lux @@ -1,6 +1,6 @@ (.require [library - [lux (.except Primitive Type Declaration int char is as type) + [lux (.except Primitive Type Declaration Double int char is as type) [abstract ["[0]" monad (.only do)]] [control diff --git a/stdlib/source/library/lux/ffi.old.lux b/stdlib/source/library/lux/ffi.old.lux index 7444e1d3a..d1922147b 100644 --- a/stdlib/source/library/lux/ffi.old.lux +++ b/stdlib/source/library/lux/ffi.old.lux @@ -1,6 +1,6 @@ (.require [library - [lux (.except is as type) + [lux (.except Double is as type) [abstract ["[0]" monad (.only Monad do)] ["[0]" enum]] diff --git a/stdlib/source/library/lux/meta/target/jvm/constant.lux b/stdlib/source/library/lux/meta/target/jvm/constant.lux index 3b77b382a..a24ae8cb8 100644 --- a/stdlib/source/library/lux/meta/target/jvm/constant.lux +++ b/stdlib/source/library/lux/meta/target/jvm/constant.lux @@ -1,6 +1,6 @@ (.require [library - [lux (.except) + [lux (.except Double) ["[0]" ffi (.only import)] [abstract [monad (.only do)] diff --git a/stdlib/source/library/lux/meta/target/jvm/constant/pool.lux b/stdlib/source/library/lux/meta/target/jvm/constant/pool.lux index 759d88314..bb57608a0 100644 --- a/stdlib/source/library/lux/meta/target/jvm/constant/pool.lux +++ b/stdlib/source/library/lux/meta/target/jvm/constant/pool.lux @@ -1,6 +1,6 @@ (.require [library - [lux (.except) + [lux (.except Double) ["[0]" ffi] [abstract [equivalence (.only Equivalence)] diff --git a/stdlib/source/library/lux/world/net/http.lux b/stdlib/source/library/lux/world/net/http.lux index 3c95a1c03..37d9c0fd4 100644 --- a/stdlib/source/library/lux/world/net/http.lux +++ b/stdlib/source/library/lux/world/net/http.lux @@ -8,13 +8,12 @@ [data [binary (.only Binary)]]]] [/ - [version (.only Version)]] + [version (.only Version)] + [status (.only Status)] + [header (.only Headers)]] [// (.only Address) [uri (.only URI) - [scheme (.only Scheme)]] - [// - ["[0]" environment - ["[1]" \\parser (.only Environment)]]]]) + [scheme (.only Scheme)]]]) (type .public Method (Variant @@ -28,19 +27,6 @@ {#Options} {#Trace})) -(type .public Status - Nat) - -(type .public Headers - Environment) - -(def .public empty - Headers - environment.empty) - -(type .public Header - (-> Headers Headers)) - (type .public (Body !) (-> (Maybe Nat) (! (Try [Nat Binary])))) diff --git a/stdlib/source/library/lux/world/net/http/client.lux b/stdlib/source/library/lux/world/net/http/client.lux index c11a8285d..49b376ee3 100644 --- a/stdlib/source/library/lux/world/net/http/client.lux +++ b/stdlib/source/library/lux/world/net/http/client.lux @@ -28,11 +28,12 @@ [syntax (.only syntax)] ["[0]" template]]]]] ["[0]" // (.only) + ["[0]" header (.only Headers)] [// (.only URL)]]) (type .public (Client !) (Interface - (is (-> //.Method URL //.Headers (Maybe Binary) + (is (-> //.Method URL Headers (Maybe Binary) (! (Try (//.Response !)))) request))) @@ -44,7 +45,7 @@ [(with_expansions [<name> (method_function <method>)] (def .public (<name> url headers data client) (All (_ !) - (-> URL //.Headers (Maybe Binary) (Client !) + (-> URL Headers (Maybe Binary) (Client !) (! (Try (//.Response !))))) (at client request {<method>} url headers data)))] @@ -173,9 +174,9 @@ output)))))))))) (def (default_headers connection) - (-> java/net/HttpURLConnection (IO (Try //.Headers))) + (-> java/net/HttpURLConnection (IO (Try Headers))) (loop (again [index +0 - headers //.empty]) + headers header.empty]) (do [! (try.with io.monad)] [?name (java/net/URLConnection::getHeaderFieldKey (ffi.as_int index) connection)] (when ?name @@ -242,5 +243,5 @@ {try.#Failure error}))))))) (def .public headers - (-> (List [Text Text]) //.Headers) + (-> (List [Text Text]) Headers) (dictionary.of_list text.hash)) diff --git a/stdlib/source/library/lux/world/net/http/header.lux b/stdlib/source/library/lux/world/net/http/header.lux index 91ad629a2..81c801924 100644 --- a/stdlib/source/library/lux/world/net/http/header.lux +++ b/stdlib/source/library/lux/world/net/http/header.lux @@ -1,35 +1,81 @@ (.require [library - [lux (.except) + [lux (.except has) [control - ["[0]" pipe]] + ["[0]" pipe] + ["[0]" try (.only Try)] + ["[0]" exception (.only Exception)]] [data [text - ["%" \\format (.only format)]] + ["%" \\format]] [collection - ["[0]" dictionary (.only Dictionary)]]]]] - [// (.only Header) + ["[0]" dictionary]]] + [math + [number + ["[0]" nat]]] + [world + ["[0]" environment + ["[1]" \\parser (.only Environment)]]]]] + [// ["[0]" mime (.only MIME)] [// (.only URL)]]) -(def .public (has name value) - (-> Text Text Header) - (dictionary.revised' name "" +(type .public Headers + Environment) + +(def .public empty + Headers + environment.empty) + +... https://developer.mozilla.org/en-US/docs/Glossary/HTTP_header +(type .public (Header of) + (Record + [#name Text + #in (-> of Text) + #out (-> Text (Try of))])) + +(exception.def .public (unknown [name]) + (Exception Text) + (exception.report + (list ["Name" (%.text name)]))) + +(def .public (one header it) + (All (_ of) + (-> (Header of) Headers + (Try of))) + (when (dictionary.value (the #name header) it) + {.#Some raw} + ((the #out header) raw) + + {.#None} + (exception.except ..unknown [(the #name header)]))) + +(def .public (has header value) + (All (_ of) + (-> (Header of) of Headers + Headers)) + (dictionary.revised' (the #name header) "" (|>> (pipe.when "" - value + ((the #in header) value) previous - (format previous "," value))))) + (%.format previous "," ((the #in header) value)))))) (def .public content_length - (-> Nat Header) - (|>> %.nat (..has "Content-Length"))) + (Header Nat) + [#name "Content-Length" + #in (at nat.decimal encoded) + #out (at nat.decimal decoded)]) (def .public content_type - (-> MIME Header) - (|>> mime.name (..has "Content-Type"))) + (Header MIME) + [#name "Content-Type" + #in mime.name + #out (|>> mime.mime {try.#Success})]) (def .public location - (-> URL Header) - (..has "Location")) + (Header URL) + [#name "Location" + #in (|>>) + #out (|>> {try.#Success})]) diff --git a/stdlib/source/library/lux/world/net/http/mime.lux b/stdlib/source/library/lux/world/net/http/mime.lux index 76a1fe51f..0ff909b96 100644 --- a/stdlib/source/library/lux/world/net/http/mime.lux +++ b/stdlib/source/library/lux/world/net/http/mime.lux @@ -1,12 +1,16 @@ (.require [library [lux (.except) + [abstract + ["[0]" equivalence (.only Equivalence)] + ["[0]" hash (.only Hash)]] [data - ["[0]" text - ["%" \\format (.only format)] + ["[0]" text (.only) + ["%" \\format] ["[0]" encoding (.only Encoding)]]] - [type - [primitive (.except)]]]]) + [meta + [type + [primitive (.except)]]]]]) (primitive .public MIME Text @@ -18,6 +22,14 @@ (def .public name (-> MIME Text) (|>> representation)) + + (def .public equivalence + (Equivalence MIME) + (at equivalence.functor each ..name text.equivalence)) + + (def .public hash + (Hash MIME) + (at hash.functor each ..name text.hash)) ) ... https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types @@ -93,7 +105,7 @@ (def .public (text encoding) (-> Encoding MIME) - (..mime (format "text/plain; charset=" text.double_quote (encoding.name encoding) text.double_quote))) + (..mime (%.format "text/plain; charset=" text.double_quote (encoding.name encoding) text.double_quote))) (def .public utf_8 MIME diff --git a/stdlib/source/library/lux/world/net/http/status.lux b/stdlib/source/library/lux/world/net/http/status.lux index 3a6b2fc67..b7b4151a9 100644 --- a/stdlib/source/library/lux/world/net/http/status.lux +++ b/stdlib/source/library/lux/world/net/http/status.lux @@ -1,7 +1,9 @@ (.require [library - [lux (.except)]] - [// (.only Status)]) + [lux (.except)]]) + +(type .public Status + Nat) ... https://en.wikipedia.org/wiki/List_of_HTTP_status_codes (with_template [<status> <name>] |