40 lines
1019 B
Haskell
40 lines
1019 B
Haskell
|
{-# LANGUAGE TypeFamilies #-}
|
||
|
{-# LANGUAGE OverloadedStrings #-}
|
||
|
|
||
|
-- | This module lets you implement 'Server's for defined APIs. You'll
|
||
|
-- most likely just need 'serve'.
|
||
|
module Servant.Server
|
||
|
( -- * Implementing an API
|
||
|
serve
|
||
|
|
||
|
, -- * Handlers for all standard combinators
|
||
|
HasServer(..)
|
||
|
) where
|
||
|
|
||
|
import Data.Proxy
|
||
|
import Network.Wai
|
||
|
import Servant.Server.Internal
|
||
|
|
||
|
-- * Implementing Servers
|
||
|
|
||
|
-- | 'serve' allows you to implement an API and produce a wai 'Application'.
|
||
|
--
|
||
|
-- Example:
|
||
|
--
|
||
|
-- > type MyApi = "books" :> Get [Book] -- GET /books
|
||
|
-- > :<|> "books" :> ReqBody Book :> Post Book -- POST /books
|
||
|
-- >
|
||
|
-- > server :: Server MyApi
|
||
|
-- > server = listAllBooks :<|> postBook
|
||
|
-- > where listAllBooks = ...
|
||
|
-- > postBook book = ...
|
||
|
-- >
|
||
|
-- > app :: Application
|
||
|
-- > app = serve myApi server
|
||
|
-- >
|
||
|
-- > main :: IO ()
|
||
|
-- > main = Network.Wai.Handler.Warp.run 8080 app
|
||
|
serve :: HasServer layout => Proxy layout -> Server layout -> Application
|
||
|
serve p server = toApplication (route p server)
|
||
|
|