diff options
| author | 2023-03-28 09:58:03 -0400 | |
|---|---|---|
| committer | 2023-03-28 09:58:03 -0400 | |
| commit | 4f4e4a3572f50a9b1b95cdf4d6a57e9980478e02 (patch) | |
| tree | 615b2105967819a1d668147f9fc8ab66bcd778ea | |
| parent | janet: move handle into request as client (diff) | |
janet: improve defapi to do smarter merging
this means I can simplify all the defapi calls
| -rw-r--r-- | jurl/init.janet | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/jurl/init.janet b/jurl/init.janet index 70d28e7..202baa2 100644 --- a/jurl/init.janet +++ b/jurl/init.janet @@ -225,6 +225,17 @@ :headers (text/parse-headers res-hdr) :status (handle :response-code)}) +(defn- merge-request + [orig new] + (let [mdict |(merge (get orig $ {}) (get new $ {}))] + # by default, we merge + (merge (merge orig new) + # custom merge targets are + {:cookies (mdict :cookies) + :headers (mdict :headers) + :options (mdict :options) + :query (mdict :query)}))) + # do as I say, not as I do # and I say, do not do this (defmacro- defapi @@ -234,7 +245,7 @@ (default ,$nextfn request) (fn [&opt ,$opts] (default ,$opts {}) - (,$nextfn (merge + (,$nextfn (merge-request (do ,;forms) ,$opts)))))) @@ -250,16 +261,9 @@ [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 {}))})))) +(defapi headers + [hdrs] + {:headers hdrs}) # I expect you to use this to start the request chain (defapi http @@ -268,17 +272,14 @@ :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 {}))})))) +(comment (defapi json + [ds] + {:body (json/encode ds) + :headers {:content-type "application/json"}})) + +(defapi query + [qs] + {:query qs}) (defapi url [u] |
