Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Content negotiation library for Clojure.
Clojure
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
src/com/twinql/clojure
test/com/twinql/clojure/conneg
.clojure
.gitignore
.travis.yml
LICENSE.txt
Readme.md
project.clj

Readme.md

clj-conneg

Build Status

A basic content negotiation library for Clojure.

Usage

The primary interface function is

com.twinql.clojure.conneg/best-allowed-content-type

which attempts to return the single best concrete type (e.g., if they specify image/jpeg and you allow image/*, it'll return image/jpeg, and vice versa).

You might also be interested in sorted-accept (at a lower level).

Usage:

(require ['com.twinql.clojure.conneg :as 'conneg])

(conneg/best-allowed-content-type
  "image/*; q=0.5, text/html, text/plain; q=0.8"
  #{"text/*"})
=>
("text" "html")

(conneg/best-allowed-content-type
  "image/*; q=0.5, text/html, text/plain; q=0.8")
=>
("text" "html")

(conneg/best-allowed-content-type
  "image/*; q=0.9, text/html; q=0.1, text/plain; q=0.8"
  #{["image" "jpeg"]})
=>
("image" "jpeg")

;; Get your accept header from your web framework,
;; and filter by which types you can produce:
(let [accept-header (:accept headers)]
  (conneg/best-allowed-content-type
    accept-header
    #{"text/html" "text/*"}))

=>
["text" "plain"]
Something went wrong with that request. Please try again.