diff options
| author | 2023-03-27 21:32:53 -0400 | |
|---|---|---|
| committer | 2023-03-27 21:32:53 -0400 | |
| commit | 3e4e27f4094784f8bba6c6fa746a9ed44954bf80 (patch) | |
| tree | 1ae4056113f313f0b0aa5f42415c7d6c97dd42de | |
| parent | janet: fix mime-related bug (diff) | |
janet: initial fancy api preview
| -rw-r--r-- | jurl/init.janet | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/jurl/init.janet b/jurl/init.janet index 71c6188..d4743a5 100644 --- a/jurl/init.janet +++ b/jurl/init.janet @@ -222,3 +222,62 @@ :handle handle :headers (text/parse-headers res-hdr) :status (handle :response-code)}) + +# do as I say, not as I do +# and I say, do not do this +(defmacro- defapi + [name args & forms] + (with-syms [$nextfn $opts] + ~(defn ,name [,;args &opt ,$nextfn] + (default ,$nextfn request) + (fn [&opt ,$opts] + (default ,$opts {}) + (,$nextfn (merge + (do ,;forms) + ,$opts)))))) + +(defapi auth + [userpwd methods] + {:auth [userpwd methods]}) + +(defapi body + [b] + {:body b}) + +(defapi cookies + [ck] + {:cookies ck}) + +# written manually to merge just the headers subfield +(defn headers + [hdrs &opt nextfn] + (default nextfn request) + (fn [&opt opts] + (default opts {}) + (nextfn (merge opts + {:headers (merge + hdrs + (get opts :headers {}))})))) + +# I expect you to use this to start the request chain +(defapi http + [method url] + {:method method + :url url}) + +# TODO: defapi json; can I do this without depending on spork? + +# written manually to merge just the query subfield +(defn query + [qs &opt nextfn] + (default nextfn request) + (fn [&opt opts] + (default opts {}) + (nextfn (merge opts + {:query (merge + qs + (get opts :query {}))})))) + +(defapi url + [u] + {:url u}) |
