apiary 1.2.1 → 1.2.2
raw patch · 4 files changed
+44/−9 lines, 4 files
Files
- CHANGELOG.md +3/−0
- apiary.cabal +1/−1
- src/Control/Monad/Apiary/Action.hs +2/−0
- src/Control/Monad/Apiary/Action/Internal.hs +38/−8
CHANGELOG.md view
@@ -1,3 +1,6 @@+# 1.2.2+* export getReqBody.+ # 1.2.1 * reduce dependencies. * relax version restriction of monad-control.
apiary.cabal view
@@ -1,5 +1,5 @@ name: apiary-version: 1.2.1+version: 1.2.2 synopsis: Simple and type safe web framework that generate web API documentation. description: Simple and type safe web framework that can be automatically generate API documentation.
src/Control/Monad/Apiary/Action.hs view
@@ -44,6 +44,8 @@ , getHeaders , getParams , getQueryParams++ , RequestBody(..), getReqBody , getReqBodyParams , getReqBodyFiles -- ** setter
src/Control/Monad/Apiary/Action/Internal.hs view
@@ -57,6 +57,8 @@ , getQueryParams , getReqBodyParams , getReqBodyFiles+ , RequestBody(..)+ , getReqBody , devFile , devFile'@@ -191,13 +193,20 @@ -------------------------------------------------------------------------------- +data RequestBody+ = Unknown S.ByteString -- ^ raw body+ | UrlEncoded [Param] [File]+ | Multipart+ {-#UNPACK#-}!S.ByteString -- ^ boundary+ [Param] [File]+ data ActionState = ActionState { actionResponse :: ResponseBody , actionStatus :: HTTP.Status , actionHeaders :: HTTP.ResponseHeaders , actionVault :: V.Vault , actionContentType :: S.ByteString- , actionReqBody :: Maybe ([Param], [File])+ , actionReqBody :: Maybe RequestBody , actionFetches :: [T.Text] } @@ -435,26 +444,47 @@ getDocuments :: Monad m => ActionT exts prms m Documents getDocuments = liftM actionDocuments getEnv -getRequestBody :: MonadIO m => ActionT exts prms m ([Param], [File])-getRequestBody = ActionT $ \_ e s c -> case actionReqBody s of- Just b -> c b s+-- | parse request body and return it. since 1.2.2.+getReqBody :: MonadIO m => ActionT exts prms m RequestBody+getReqBody = ActionT $ \_ e s c -> case actionReqBody s of+ Just b -> c b s Nothing -> do- (p,f) <- liftIO $ P.parseRequestBody P.lbsBackEnd (actionRequest e)- let b = (p, map convFile f)+ let req = actionRequest e+ body = Wai.requestBody req+ b <- liftIO $ case P.getRequestBodyType req of+ Nothing -> Unknown `liftM` body+ Just typ@P.UrlEncoded -> sink UrlEncoded typ body+ Just typ@(P.Multipart b) -> sink (Multipart b) typ body c b s { actionReqBody = Just b } where+ sink con typ body = do+ (p, f) <- P.sinkRequestBody P.lbsBackEnd typ body+ return $ con p (map convFile f)+ convFile (p, P.FileInfo{..}) = File p fileName fileContentType fileContent getQueryParams :: Monad m => ActionT exts prms m HTTP.Query getQueryParams = Wai.queryString <$> getRequest +getRequestBody :: MonadIO m => ActionT exts prms m ([Param], [File])+getRequestBody = getReqBody >>= return . \case+ Unknown _ -> ([], [])+ UrlEncoded p f -> (p, f)+ Multipart _ p f -> (p, f)+ -- | parse request body and return params. since 1.0.0. getReqBodyParams :: MonadIO m => ActionT exts prms m [Param]-getReqBodyParams = fst <$> getRequestBody+getReqBodyParams = getReqBody >>= return . \case+ Unknown _ -> []+ UrlEncoded p _ -> p+ Multipart _ p _ -> p -- | parse request body and return files. since 0.9.0.0. getReqBodyFiles :: MonadIO m => ActionT exts prms m [File]-getReqBodyFiles = snd <$> getRequestBody+getReqBodyFiles = getReqBody >>= return . \case+ Unknown _ -> []+ UrlEncoded _ f -> f+ Multipart _ _ f -> f -- | get all request headers. since 0.6.0.0. getHeaders :: Monad m => ActionT exts prms m HTTP.RequestHeaders