packages feed

core-webserver-servant 0.1.0.0 → 0.1.1.0

raw patch · 2 files changed

+38/−13 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Core.Webserver.Servant: prepareRoutesWithContext :: forall τ (api :: Type) context. (HasServer api context, ServerContext context) => Proxy api -> Context context -> ServerT api (Program τ) -> Program τ Application

Files

core-webserver-servant.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           core-webserver-servant-version:        0.1.0.0+version:        0.1.1.0 synopsis:       Interoperability with Servant description:    This is part of a library to help build command-line programs, both tools and                 longer-running daemons.
lib/Core/Webserver/Servant.hs view
@@ -28,19 +28,27 @@ -} module Core.Webserver.Servant (     prepareRoutes,+    prepareRoutesWithContext, ) where -import Control.Exception.Safe (try) import Control.Monad.Except (ExceptT (..)) import Core.Program-import Core.System (Exception (..), throw)+import Core.System (Exception (..))+import Core.Telemetry.Observability (clearMetrics) import Core.Webserver.Warp import Data.Proxy (Proxy) import GHC.Base (Type) import Network.Wai (Application)-import Servant (Handler (..), ServerT)-import Servant.Server (HasServer, hoistServer, serve)-import Core.Telemetry.Observability (clearMetrics)+import qualified Servant as Servant (+    Handler (..),+    ServerT,+ )+import qualified Servant.Server as Servant (+    Context (..),+    HasServer,+    ServerContext,+    serveWithContextT,+ )  data ContextNotFoundInRequest = ContextNotFoundInRequest deriving (Show) @@ -66,11 +74,26 @@ -} prepareRoutes ::     forall τ (api :: Type).-    HasServer api '[] =>+    Servant.HasServer api '[] =>     Proxy api ->-    ServerT api (Program τ) ->+    Servant.ServerT api (Program τ) ->     Program τ Application-prepareRoutes proxy (routes :: ServerT api (Program τ)) =+prepareRoutes proxy = prepareRoutesWithContext proxy Servant.EmptyContext++{- |+Prepare routes as with 'prepareRoutes' above, but providing a __servant__+'Servant.Server.Context' in order to give detailed control of the setup.++@since 0.1.1+-}+prepareRoutesWithContext ::+    forall τ (api :: Type) context.+    (Servant.HasServer api context, Servant.ServerContext context) =>+    Proxy api ->+    Servant.Context context ->+    Servant.ServerT api (Program τ) ->+    Program τ Application+prepareRoutesWithContext proxy sContext (routes :: Servant.ServerT api (Program τ)) =     pure application   where     application :: Application@@ -86,17 +109,19 @@         context <- case contextFromRequest @τ request of             Just context' -> pure context'             Nothing -> throw ContextNotFoundInRequest-        serve+        Servant.serveWithContextT             proxy-            (hoistServer proxy (transformProgram context) routes)+            sContext+            (transformProgram context)+            routes             request             sendResponse -    transformProgram :: Context τ -> Program τ α -> Handler α+    transformProgram :: Context τ -> Program τ α -> Servant.Handler α     transformProgram context program =         let output =                 try $                     subProgram context $ do                         clearMetrics                         program-         in Handler (ExceptT output)+         in Servant.Handler (ExceptT output)