missionary

J 2025-03-11T10:22:39.648769Z

Hi guys! I need to do some i/o computation in a ring middleware. I'm wondering if this example is correct:

(defn ?task [req] (m/via m/blk ...))

(defn my-middleware
  [handler]
  (fn [request respond raise]
    (let [run-task (?task req)]
      (run-task
        (fn [result]
          (handler request respond raise))
        (fn [_] ...)

leonoel 2025-03-11T11:15:57.383189Z

it looks correct to me, but it's a highway to callback-hell

leonoel 2025-03-11T11:17:55.050379Z

(defn handler-task [handler request]
  (fn [s f]
    (handler request s f)
    (fn [])))

(defn task-handler [f & args]
  (fn [request respond raise]
    ((apply f request args) respond raise)))

(defn my-middleware [handler]
  (task-handler
    (fn [request]
      (m/sp
        (m/? (?task request))
        (m/? (handler-task handler request))))))

👍 1
J 2025-03-11T11:25:13.350769Z

Thank leo