reitit/examples/http/src/example/server.clj

69 lines
2.1 KiB
Clojure
Raw Normal View History

2018-08-20 15:48:22 +00:00
(ns example.server
(:require [reitit.http :as http]
[reitit.ring :as ring]
[reitit.interceptor.sieppari]
2020-05-16 14:53:43 +00:00
[sieppari.async.core-async] ;; needed for core.async
[sieppari.async.manifold] ;; needed for manifold
2018-09-03 09:35:28 +00:00
[ring.adapter.jetty :as jetty]
2018-09-03 15:52:57 +00:00
[muuntaja.interceptor]
2018-09-03 09:35:28 +00:00
[clojure.core.async :as a]
[manifold.deferred :as d]
[promesa.core :as p]))
2018-08-20 15:48:22 +00:00
2018-09-03 09:35:28 +00:00
(defn interceptor [f x]
2018-09-03 15:52:57 +00:00
{: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})))})
2018-08-25 13:28:57 +00:00
2018-09-03 09:35:28 +00:00
(defn handler [f]
(fn [{:keys [via]}]
(f {:status 200,
2018-09-03 15:52:57 +00:00
:body (conj via :handler)})))
2018-08-25 13:28:57 +00:00
2018-09-03 09:35:28 +00:00
(def <sync> identity)
(def <future> #(future %))
(def <async> #(a/go %))
(def <deferred> d/success-deferred)
(def <promesa> p/promise)
2018-08-25 13:28:57 +00:00
2018-08-20 15:48:22 +00:00
(def app
(http/ring-handler
(http/router
2018-08-25 13:28:57 +00:00
["/api"
2018-09-03 09:35:28 +00:00
{:interceptors [(interceptor <sync> :api)]}
2018-08-25 13:28:57 +00:00
["/sync"
2018-09-03 09:35:28 +00:00
{:interceptors [(interceptor <sync> :sync)]
:get {:interceptors [(interceptor <sync> :get)]
:handler (handler <sync>)}}]
2018-08-25 13:28:57 +00:00
2018-08-25 13:30:16 +00:00
["/future"
2018-09-03 09:35:28 +00:00
{:interceptors [(interceptor <future> :future)]
:get {:interceptors [(interceptor <future> :get)]
:handler (handler <future>)}}]
2018-08-25 13:30:16 +00:00
2018-08-25 13:28:57 +00:00
["/async"
2018-09-03 09:35:28 +00:00
{:interceptors [(interceptor <async> :async)]
:get {:interceptors [(interceptor <async> :get)]
:handler (handler <async>)}}]
["/deferred"
{:interceptors [(interceptor <deferred> :deferred)]
:get {:interceptors [(interceptor <deferred> :get)]
:handler (handler <deferred>)}}]
["/promesa"
{:interceptors [(interceptor <promesa> :promesa)]
:get {:interceptors [(interceptor <promesa> :get)]
:handler (handler <promesa>)}}]])
2018-08-25 13:28:57 +00:00
(ring/create-default-handler)
2018-09-03 15:52:57 +00:00
{:executor reitit.interceptor.sieppari/executor
:interceptors [(muuntaja.interceptor/format-interceptor)]}))
2018-08-20 15:48:22 +00:00
(defn start []
(jetty/run-jetty #'app {:port 3000, :join? false, :async? true})
(println "server running in port 3000"))
(comment
(start))