diff --git a/servant-server/servant-server.cabal b/servant-server/servant-server.cabal index 6c325517..116c0a10 100644 --- a/servant-server/servant-server.cabal +++ b/servant-server/servant-server.cabal @@ -53,10 +53,11 @@ library , split >= 0.2 && < 0.3 , string-conversions >= 0.3 && < 0.4 , system-filepath >= 0.4 && < 0.5 + , filepath >= 1 , text >= 1.2 && < 1.3 , transformers >= 0.3 && < 0.5 , wai >= 3.0 && < 3.1 - , wai-app-static >= 3.0 && < 3.1 + , wai-app-static >= 3.0 && < 3.2 , warp >= 3.0 && < 3.1 hs-source-dirs: src default-language: Haskell2010 diff --git a/servant-server/src/Servant/Utils/StaticFiles.hs b/servant-server/src/Servant/Utils/StaticFiles.hs index 07c51173..203c27f3 100644 --- a/servant-server/src/Servant/Utils/StaticFiles.hs +++ b/servant-server/src/Servant/Utils/StaticFiles.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} -- | This module defines a sever-side handler that lets you serve static files. -- -- - 'serveDirectory' lets you serve anything that lives under a particular @@ -6,10 +7,13 @@ module Servant.Utils.StaticFiles ( serveDirectory, ) where -import Filesystem.Path.CurrentOS (decodeString) +import System.FilePath (addTrailingPathSeparator) import Network.Wai.Application.Static (staticApp, defaultFileServerSettings) import Servant.API.Raw (Raw) import Servant.Server (Server) +#if !MIN_VERSION_wai_app_static(3,1,0) +import Filesystem.Path.CurrentOS (decodeString) +#endif -- | Serve anything under the specified directory as a 'Raw' endpoint. -- @@ -32,5 +36,9 @@ import Servant.Server (Server) -- handler in the last position, because /servant/ will try to match the handlers -- in order. serveDirectory :: FilePath -> Server Raw -serveDirectory documentRoot = - staticApp (defaultFileServerSettings (decodeString (documentRoot ++ "/"))) +serveDirectory = +#if MIN_VERSION_wai_app_static(3,1,0) + staticApp . defaultFileServerSettings . addTrailingPathSeparator +#else + staticApp . defaultFileServerSettings . decodeString . addTrailingPathSeparator +#endif