summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang/Server.hs
diff options
context:
space:
mode:
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 ()