Skip to content

Instantly share code, notes, and snippets.

@ergodicbreak
Created November 3, 2022 08:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ergodicbreak/f4f0ae210b1b5d6996baedfd603b45b7 to your computer and use it in GitHub Desktop.
Save ergodicbreak/f4f0ae210b1b5d6996baedfd603b45b7 to your computer and use it in GitHub Desktop.
(ns cheshire-cat.core
(:require [ring.adapter.jetty :refer [run-jetty]]
[ring.util.response :as rr]
[compojure.core :refer :all]
[compojure.route :as route]
[ring.middleware.defaults :refer [wrap-defaults site-defaults]]
[ring.middleware.resource :refer [wrap-resource]]
[clojure.data.json :as json])
(:gen-class))
;; https://github.com/ring-clojure/ring/wiki/Concepts#middleware
(defn json-response [response]
(-> response
(update :body json/write-str)
(rr/content-type "application/json; charset=utf-8")))
(defn wrap-json-response [handler]
(fn
([request]
(-> (handler request) (json-response)))
([request respond raise]
(handler request #(respond (json-response)) raise))))
(defroutes app-routes
(GET "/" [] "Hello world!")
(GET "/cheshire-cat" [] (rr/response {:name "Cheshire Cat" :status "grinning!!"}))
(route/not-found "Not found."))
(def app
(-> app-routes
(wrap-json-response)
(wrap-defaults site-defaults)))
(defn -main [& args]
(run-jetty app {:port 3000}))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment