servant/servant-docs
Arian van Putten 05379ed7e3 Replace all occurances of () with NoContent
We use NoContent to signify an empty response nowadays. This commit
replaces all occurences of () with NoContent so that all packages use
the new semantics.
2016-07-10 16:58:59 +02:00
..
example Replace all occurances of () with NoContent 2016-07-10 16:58:59 +02:00
include less OverlappingInstances noise 2016-01-04 13:09:11 -05:00
src/Servant Replace all occurances of () with NoContent 2016-07-10 16:58:59 +02:00
test ComprehensiveAPI: add some comments (and minor tweaks) 2016-01-18 20:06:45 +01:00
.ghci servant-docs: add .ghci 2016-01-18 12:28:29 +01:00
CHANGELOG.md Changelog updates for GHC 8.0 support. 2016-05-10 22:45:29 +02:00
docs.sh prepare merge 2015-04-20 11:19:48 +02:00
LICENSE Change copyright to servant contributors 2016-01-20 16:58:29 +01:00
README.md Fix broken link 2015-12-18 16:56:37 -08:00
servant-docs.cabal version bump 2016-05-11 12:09:25 +08:00
Setup.hs stylish haskell changes 2015-08-18 00:07:12 +02:00
tinc.yaml Use tinc on travis 2015-11-05 09:32:13 +08:00

servant-docs

servant

Generate API docs for your servant webservice. Feel free to also take a look at servant-pandoc which uses this package to target a broad range of output formats using the excellent pandoc.

Example

See here for the output of the following program.

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}

import Data.Proxy
import Data.Text
import Servant

-- our type for a Greeting message
data Greet = Greet { _msg :: Text }
  deriving (Generic, Show)

-- we get our JSON serialization for free. This will be used by the default
-- 'MimeRender' instance for 'JSON'.
instance FromJSON Greet
instance ToJSON Greet

-- We can also implement 'MimeRender' explicitly for additional formats.
instance MimeRender PlainText Greet where
    mimeRender Proxy (Greet s) = "<h1>" <> cs s <> "</h1>"

-- we provide a sample value for the 'Greet' type
instance ToSample Greet where
  toSample = Just g

    where g = Greet "Hello, haskeller!"

instance ToParam (QueryParam "capital" Bool) where
  toParam _ =
    DocQueryParam "capital"
                  ["true", "false"]
                  "Get the greeting message in uppercase (true) or not (false). Default is false."

instance ToCapture (Capture "name" Text) where
  toCapture _ = DocCapture "name" "name of the person to greet"

instance ToCapture (Capture "greetid" Text) where
  toCapture _ = DocCapture "greetid" "identifier of the greet msg to remove"

-- API specification
type TestApi =
       "hello" :> Capture "name" Text :> QueryParam "capital" Bool :> Get '[JSON,PlainText] Greet
  :<|> "greet" :> RQBody '[JSON] Greet :> Post '[JSON] Greet
  :<|> "delete" :> Capture "greetid" Text :> Delete '[] ()

testApi :: Proxy TestApi
testApi = Proxy

-- Generate the Documentation's ADT
greetDocs :: API
greetDocs = docs testApi

main :: IO ()
main = putStrLn $ markdown greetDocs