summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang/Server.hs
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud@pankzsoft.com>2025-11-05 16:28:56 +0100
committerArnaud Bailly <arnaud@pankzsoft.com>2025-11-05 16:28:56 +0100
commitf08fa03af4f6cf38e664d74c6a0a4a3e65746fb2 (patch)
tree8c988caea702e0f2ac9be9c8b697a8a7bb0e9ed3 /lambda-calcul/haskell/src/Minilang/Server.hs
parentafcfa146122179dc80dd8055314b1381d152fb09 (diff)
downloadlambda-nantes-f08fa03af4f6cf38e664d74c6a0a4a3e65746fb2.tar.gz
provide help on the leaderboard and OpenAPI specification
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Server.hs')
-rw-r--r--lambda-calcul/haskell/src/Minilang/Server.hs17
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 ()