on 13664a2 help sign in
servant/src/Servant/API/RQBody.hs
40 lines 1.1 kB history raw
1{-# LANGUAGE PolyKinds #-}
2{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE TypeOperators #-}
4{-# LANGUAGE FlexibleInstances #-}
5{-# LANGUAGE ScopedTypeVariables #-}
6module Servant.API.RQBody where
8import Control.Applicative
9import Data.Aeson
10import Data.Proxy
11import Data.Text
12import Network.Wai
13import Servant.API.Sub
14import Servant.Client
15import Servant.Server
17-- * Request Body support
18data RQBody a
20instance (FromJSON a, HasServer sublayout)
21 => HasServer (RQBody a :> sublayout) where
23 type Server (RQBody a :> sublayout) =
24 a -> Server sublayout
26 route Proxy subserver request = do
27 mrqbody <- decode' <$> lazyRequestBody request
28 case mrqbody of
29 Nothing -> return Nothing
30 Just v -> route (Proxy :: Proxy sublayout) (subserver v) request
32instance (ToJSON a, HasClient sublayout)
33 => HasClient (RQBody a :> sublayout) where
35 type Client (RQBody a :> sublayout) =
36 a -> Client sublayout
38 clientWithRoute Proxy req body =
39 clientWithRoute (Proxy :: Proxy sublayout) $
40 setRQBody (encode body) req