@weavejester wrote about the protocols I was mumbling about: https://github.com/ring-clojure/ring/issues/372