diff options
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Server.hs')
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Server.hs | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/Server.hs b/lambda-calcul/haskell/src/Minilang/Server.hs index 67b321d..68d991a 100644 --- a/lambda-calcul/haskell/src/Minilang/Server.hs +++ b/lambda-calcul/haskell/src/Minilang/Server.hs @@ -1,6 +1,8 @@ +{-# LANGUAGE DataKinds #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeOperators #-} -- | An HTTP server providing a basic REPL and text editor to work -- collaboratively on Minilang code. @@ -20,16 +22,18 @@ import Data.ByteString.Lazy (fromStrict) import qualified Data.ByteString.Lazy as LBS import Data.Data (Proxy (..)) import Data.Default +import Data.Swagger (Swagger) import Data.Text (Text) import Minilang.API (Challenge, LambdaAPI, defaultChallenges) import Minilang.App (Env (..), lambdaApp, makeEnv, runApp) import Minilang.Log +import Minilang.OpenApi (lambdaSwagger) import Minilang.REPL.Net import Network.Wai import Network.Wai.Handler.Warp as Warp import Network.Wai.Middleware.RequestLogger import Network.Wai.Middleware.RequestLogger.JSON -import Servant (hoistServer) +import Servant (Get, JSON, hoistServer, (:<|>) (..), (:>)) import Servant.Server (serve) import System.Log.FastLogger (fromLogStr) import System.Random (newStdGen) @@ -82,12 +86,19 @@ readChallenges = do serveAPI :: Env -> Application serveAPI env = - serve apiProxy $ - hoistServer apiProxy (runApp env) lambdaApp + serve fullApiProxy $ + hoistServer fullApiProxy (runApp env) (pure lambdaSwagger :<|> lambdaApp) + +type FullAPI = + "api.json" :> Get '[JSON] Swagger + :<|> LambdaAPI apiProxy :: Proxy LambdaAPI apiProxy = Proxy +fullApiProxy :: Proxy FullAPI +fullApiProxy = Proxy + stopServer :: Server -> IO () stopServer (Server (Just th) _) = cancel th stopServer _ = pure () |
