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"