on 4f62dce help sign in
servant/src/Servant/API/Delete.hs
51 lines 1.5 kB history raw
1{-# LANGUAGE TypeFamilies #-}
2{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE ScopedTypeVariables #-}
4{-# LANGUAGE DeriveDataTypeable #-}
5module Servant.API.Delete where
7import Control.Monad.Trans.Either
8import Data.Proxy
9import Data.String.Conversions
10import Data.Typeable
11import Network.HTTP.Types
12import Network.Wai
13import Servant.Client
14import Servant.Common.BaseUrl
15import Servant.Common.Req
16import Servant.Docs
17import Servant.Server
19-- | Endpoint for DELETE requests.
20data Delete
21 deriving Typeable
23instance HasServer Delete where
24 type Server Delete = EitherT (Int, String) IO ()
26 route Proxy action request respond
27 | null (pathInfo request) && requestMethod request == methodDelete = do
28 e <- runEitherT action
29 respond $ succeedWith $ case e of
30 Right () ->
31 responseLBS status204 [] ""
32 Left (status, message) ->
33 responseLBS (mkStatus status (cs message)) [] (cs message)
34 | null (pathInfo request) && requestMethod request /= methodDelete =
35 respond $ failWith WrongMethod
36 | otherwise = respond $ failWith NotFound
38instance HasClient Delete where
39 type Client Delete = BaseUrl -> EitherT String IO ()
41 clientWithRoute Proxy req host =
42 performRequest methodDelete req 204 host
44instance HasDocs Delete where
45 docsFor Proxy (endpoint, action) =
46 single endpoint' action'
48 where endpoint' = endpoint & method .~ DocDELETE
50 action' = action & response.respBody .~ Nothing
51 & response.respStatus .~ 204