(ns example.server (:require [reitit.http :as http] [reitit.ring :as ring] [reitit.interceptor.sieppari] [sieppari.async.core-async] ;; needed for core.async [sieppari.async.manifold] ;; needed for manifold [ring.adapter.jetty :as jetty] [muuntaja.interceptor] [clojure.core.async :as a] [manifold.deferred :as d] [promesa.core :as p])) (defn interceptor [f x] {:enter (fn [ctx] (f (update-in ctx [:request :via] (fnil conj []) {:enter x}))) :leave (fn [ctx] (f (update-in ctx [:response :body] conj {:leave x})))}) (defn handler [f] (fn [{:keys [via]}] (f {:status 200, :body (conj via :handler)}))) (def identity) (def #(future %)) (def #(a/go %)) (def d/success-deferred) (def p/promise) (def app (http/ring-handler (http/router ["/api" {:interceptors [(interceptor :api)]} ["/sync" {:interceptors [(interceptor :sync)] :get {:interceptors [(interceptor :get)] :handler (handler )}}] ["/future" {:interceptors [(interceptor :future)] :get {:interceptors [(interceptor :get)] :handler (handler )}}] ["/async" {:interceptors [(interceptor :async)] :get {:interceptors [(interceptor :get)] :handler (handler )}}] ["/deferred" {:interceptors [(interceptor :deferred)] :get {:interceptors [(interceptor :get)] :handler (handler )}}] ["/promesa" {:interceptors [(interceptor :promesa)] :get {:interceptors [(interceptor :get)] :handler (handler )}}]]) (ring/create-default-handler) {:executor reitit.interceptor.sieppari/executor :interceptors [(muuntaja.interceptor/format-interceptor)]})) (defn start [] (jetty/run-jetty #'app {:port 3000, :join? false, :async? true}) (println "server running in port 3000")) (comment (start))