packages feed

servant-errors 0.1.1.1 → 0.1.2.0

raw patch · 2 files changed

+8/−8 lines, 2 files

Files

servant-errors.cabal view
@@ -1,6 +1,6 @@ cabal-version:       2.2 name:                servant-errors-version:             0.1.1.1+version:             0.1.2.0 synopsis:            Servant Errors wai-middlware description:         A Wai middleware that uniformly structures errors with in a servant application. The library assumes all HTTP responses with status code greater than 200 and without an HTTP content type are error responses. This assumption is derived from servant server error handling implementation. 
src/Network/Wai/Middleware/Servant/Errors.hs view
@@ -70,7 +70,7 @@ import GHC.TypeLits (KnownSymbol, Symbol, symbolVal) import qualified Network.HTTP.Media as M import Network.HTTP.Types (Header, Status (..), hContentType)-import Network.Wai (Application, Response, responseHeaders, responseLBS, responseStatus,+import Network.Wai (Response, Middleware, responseHeaders, responseLBS, responseStatus,                     responseToStream) import Servant.API.ContentTypes (Accept (..), JSON, PlainText) @@ -108,14 +108,14 @@  instance  (KnownSymbol errLabel, KnownSymbol statusLabel)   => HasErrorBody JSON '[errLabel, statusLabel] where-    encodeError = encodeAsJsonError (getErrorLabels @statusLabel @errLabel)+    encodeError = encodeAsJsonError (getErrorLabels @errLabel @statusLabel)  instance HasErrorBody JSON '[] where   encodeError = encodeError @JSON @["error", "status"]  instance  (KnownSymbol errLabel, KnownSymbol statusLabel)   => HasErrorBody PlainText '[errLabel, statusLabel] where-    encodeError = encodeAsPlainText (getErrorLabels @statusLabel @errLabel)+    encodeError = encodeAsPlainText (getErrorLabels @errLabel @statusLabel)  instance HasErrorBody PlainText '[] where   encodeError = encodeError @JSON @["error", "status"]@@ -127,7 +127,7 @@ -- A resulting response may look like this: -- @\{ error: \"failed to decode request body\", status: 400 \}@ ---errorMwDefJson :: Application -> Application+errorMwDefJson :: Middleware errorMwDefJson = errorMw @JSON @'[]  -- | 'errorMw' functions provides "Network.Wai" middleware for formatting error responses@@ -136,15 +136,15 @@ -- -- > errorMw @JSON @'[ "error", "status"] ---errorMw :: forall ctyp opts. HasErrorBody ctyp opts => Application -> Application+errorMw :: forall ctyp opts. HasErrorBody ctyp opts => Middleware errorMw baseApp req respond =   baseApp req $ \ response -> do      let status      = responseStatus response          mcontentType = getContentTypeHeader response+         processResponse = newResponse @ctyp @opts status response >>= respond      case (status, mcontentType) of        (Status 200 _, _)                     -> respond response-       (Status code _, Nothing) | code > 200 ->-         newResponse @ctyp @opts status response >>= respond+       (Status code _, Nothing) | code > 200 -> processResponse        _                                     -> respond response   where     getContentTypeHeader :: Response -> Maybe Header