Как мне распечатать описание всех исключений? Было бы здорово переключить формат отладки / выпуска.
Стандартная установка Servant показывает только 500/Something went wrong
, что не очень полезно
HTTP/1.1 500 Internal Server Error
Something went wrong
Upd:
I получите следующую ошибку, сообщающую о моем первом обработчике:
Server.hs:152:31: error:
• No instance for (MonadCatch
((:<|>) (Servant.Handler (Map.Map String String))))
arising from a use of ‘catch’
• In the expression:
server `catch` (\ e -> handleExceptions (e :: SomeException))
In an equation for ‘serverWithExceptionsHandled’:
serverWithExceptionsHandled
= server `catch` (\ e -> handleExceptions (e :: SomeException))
Сам обработчик:
type API = "ping" :> Get '[JSON] (Map.Map String String) ...
ping :: Servant.Handler (Map.Map String String)
ping = return $ Map.fromList [("reply", "pong")]
Обновление:
server :: Server API
server = ping
:<|> signup
:<|> singin
:<|> account
:<|> getSessions
serverWithExceptionsHandled = server `catch` (\e -> handleExceptions (e :: SomeException))
-- | print to console and then rethrow
handleExceptions :: (MonadIO m, MonadThrow m, Exception e) => e -> m b
handleExceptions e = do
liftIO $ print e
throwM e
app :: Application
app = serveWithContext api ctx serverWithExceptionsHandled
where ctx = checkBasicAuth :. EmptyContext