servant-swagger-ui-0.3.5.4.5.0: Servant swagger ui
Copyright (C) 2016-2018 Oleg Grenrus
License BSD-3-Clause
Maintainer Oleg Grenrus <oleg.grenrus@iki.fi>
Safe Haskell None
Language Haskell2010

Servant.Swagger.UI

Description

Provides SwaggerUI and corresponding swaggerSchemaUIServer to embed swagger ui into the application.

All of the UI files are embedded into the binary.

Note that you need to depend on particular swagger-ui compatible provider:

An example:

-- | Actual API.
type BasicAPI = Get '[PlainText, JSON] Text
    :<|> "cat" :> Capture ":name" CatName :> Get '[JSON] Cat

-- | API type with bells and whistles, i.e. schema file and swagger-ui.
type API = SwaggerSchemaUI "swagger-ui" "swagger.json"
    :<|> BasicAPI

-- | Servant server for an API
server :: Server API
server = swaggerSchemaUIServer swaggerDoc
    :<|> (pure "Hello World" :<|> catEndpoint)
  where
    catEndpoint name = pure $ Cat name False
Synopsis

Swagger UI API

type SwaggerSchemaUI (dir :: Symbol ) (schema :: Symbol ) = SwaggerSchemaUI' dir (schema :> Get '[ JSON ] Value ) Source #

Swagger schema + ui api.

SwaggerSchemaUI "swagger-ui" "swagger.json" will result into following hierarchy:

/swagger.json
/swagger-ui
/swagger-ui/index.html
/swagger-ui/...

This type does not actually force served type to be Swagger from swagger2 package, it could be arbitrary aeson Value .

type SwaggerSchemaUI' (dir :: Symbol ) api = api :<|> (dir :> ( Get '[ HTML ] ( SwaggerUiHtml dir api) :<|> (("index.html" :> Get '[ HTML ] ( SwaggerUiHtml dir api)) :<|> Raw ))) Source #

Use SwaggerSchemaUI' when you need even more control over where swagger.json is served (e.g. subdirectory).

swaggerSchemaUIServer :: ( Server api ~ Handler Value , ToJSON a) => a -> Server ( SwaggerSchemaUI' dir api) Source #

Serve Swagger UI on /dir using api as a Swagger spec source.

swaggerSchemaUIServer :: Swagger -> Server (SwaggerSchemaUI schema dir)
swaggerSchemaUIServer :: OpenApi -> Server (SwaggerSchemaUI schema dir)

swaggerSchemaUIServerT :: ( Monad m, ServerT api m ~ m Value , ToJSON a) => a -> ServerT ( SwaggerSchemaUI' dir api) m Source #

Serve Swagger UI on /dir using api as a Swagger spec source.

Generalized to ServerT

swaggerSchemaUIServerT :: Swagger -> ServerT (SwaggerSchemaUI schema dir) m
swaggerSchemaUIServerT :: OpenApi -> ServerT (SwaggerSchemaUI schema dir) m

swaggerSchemaUIServer' :: Server api -> Server ( SwaggerSchemaUI' dir api) Source #

Use a custom server to serve the Swagger spec source.

This allows even more control over how the spec source is served. It allows, for instance, serving the spec source with authentication, customizing the response based on the client or serving a swagger.yaml instead.

swaggerSchemaUIServerT' :: Monad m => ServerT api m -> ServerT ( SwaggerSchemaUI' dir api) m Source #

Use a custom server to serve the Swagger spec source.

This allows even more control over how the spec source is served. It allows, for instance, serving the spec source with authentication, customizing the response based on the client or serving a swagger.yaml instead.

Generalized to ServerT

Official swagger ui