Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Doc update: rescue cannot be used in macro chains #91

Open
LeviSchuck opened this issue Apr 30, 2021 · 1 comment
Open

Doc update: rescue cannot be used in macro chains #91

LeviSchuck opened this issue Apr 30, 2021 · 1 comment

Comments

@LeviSchuck
Copy link

I found the code in the authentication docs https://github.com/joy-framework/joy/blob/6ede2012c0aa0f9c524c3c869cd1787217c1ecd5/docs/authentication.md
to not work here (also there is a typo, an extra parentheses after the ?)

(defn create [request]
  (let [[_ account-params] (as-> request ?)
                                 (params ?)
                                 (rescue ?))

The body of the try block in rescue is not executed in this style.
Instead, it has to wrap around the whole pipe chain with as->

(defn create [request]
  (let [[_ account-params] (rescue (as-> request ?
                                 (params ?)))

Locally I verified behavior by replacing rescue with the following

(defmacro rescue [f &opt id]
  ~(try
     (do (eprintf "About to run rescue") [nil ,f])
     ([err fib]
      (eprintf "Rescuing maybe %p" err)
      (if (and (dictionary? err)
            (or (truthy? (get err :id))
              (= ,id (get err :id))))
        [(get err :error) nil]
        (do
          (eprintf "Propigating error %p" err)
          (propagate err fib)
         )
))))

I'll probably update my example project later with working features.

@swlkr
Copy link
Collaborator

swlkr commented Apr 30, 2021

I updated that authentication doc so hopefully it represents a working example like yours

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants