summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang/OpenApi.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/OpenApi.hs')
-rw-r--r--lambda-calcul/haskell/src/Minilang/OpenApi.hs49
1 files changed, 49 insertions, 0 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/OpenApi.hs b/lambda-calcul/haskell/src/Minilang/OpenApi.hs
new file mode 100644
index 0000000..8d24fec
--- /dev/null
+++ b/lambda-calcul/haskell/src/Minilang/OpenApi.hs
@@ -0,0 +1,49 @@
+module Minilang.OpenApi where
+
+import Control.Lens ((&), (.~), (?~))
+import Data.Swagger
+ ( HasDescription (description),
+ HasInfo (info),
+ HasLicense (license),
+ HasTitle (title),
+ HasType (type_),
+ HasVersion (version),
+ NamedSchema (NamedSchema),
+ Swagger,
+ SwaggerType (SwaggerString),
+ ToParamSchema (..),
+ ToSchema (..),
+ )
+import Minilang.API (Challenge, Score, Token, User, lambdaAPI)
+import Servant.Swagger (HasSwagger (toSwagger))
+
+instance ToSchema Token where
+ declareNamedSchema _ =
+ return $
+ NamedSchema (Just "Token") $
+ mempty
+ & description ?~ "A hex-encoded bytestring."
+ & type_ ?~ SwaggerString
+
+instance ToSchema User where
+ declareNamedSchema _ =
+ return $
+ NamedSchema (Just "User") $
+ mempty
+ & description ?~ "A user name."
+ & type_ ?~ SwaggerString
+
+instance ToSchema Score
+
+instance ToSchema Challenge
+
+instance ToParamSchema Token where
+ toParamSchema _ = mempty & type_ ?~ SwaggerString
+
+lambdaSwagger :: Swagger
+lambdaSwagger =
+ toSwagger lambdaAPI
+ & info . title .~ "λ-Calculus Challenge API"
+ & info . version .~ "0.1"
+ & info . description ?~ "An API for learning and experimenting with the λ-calculus one challenge at a time"
+ & info . license ?~ "© Arnaud Bailly - All Rights Reserved"