servant-swagger-1.0.3: Generate Swagger specification for your servant API.

Safe HaskellNone
LanguageHaskell2010

Servant.Swagger.Internal

Synopsis

Documentation

class HasSwagger api where Source

Generate a Swagger specification for a servant API.

To generate Swagger specification, your data types need ToParamSchema and/or ToSchema instances.

ToParamSchema is used for Capture, QueryParam and Header. ToSchema is used for ReqBody and response data types.

You can easily derive those instances via Generic. For more information, refer to swagger2 documentation.

Example:

newtype Username = Username String deriving (Generic, ToText)

instance ToParamSchema Username

data User = User
  { username :: Username
  , fullname :: String
  } deriving (Generic)

instance ToJSON User
instance ToSchema User

type MyAPI = QueryParam "username" Username :> Get '[JSON] User

mySwagger :: Swagger
mySwagger = toSwagger (Proxy :: Proxy MyAPI)

Methods

toSwagger :: Proxy api -> Swagger Source

Generate a Swagger specification for a servant API.

Instances

HasSwagger * Raw Source 
(HasSwagger * a, HasSwagger * b) => HasSwagger * ((:<|>) a b) Source 
AllAccept [*] cs => HasSwagger * (Get cs ()) Source 
(ToSchema a, AllAccept [*] cs, AllToResponseHeader [*] hs) => HasSwagger * (Get cs (Headers hs a)) Source 
(ToSchema a, AllAccept [*] cs) => HasSwagger * (Get cs a) Source 
AllAccept [*] cs => HasSwagger * (Post cs ()) Source 
(ToSchema a, AllAccept [*] cs, AllToResponseHeader [*] hs) => HasSwagger * (Post cs (Headers hs a)) Source 
(ToSchema a, AllAccept [*] cs) => HasSwagger * (Post cs a) Source 
AllAccept [*] cs => HasSwagger * (Delete cs ()) Source 
(ToSchema a, AllAccept [*] cs, AllToResponseHeader [*] hs) => HasSwagger * (Delete cs (Headers hs a)) Source 
(ToSchema a, AllAccept [*] cs) => HasSwagger * (Delete cs a) Source 
AllAccept [*] cs => HasSwagger * (Put cs ()) Source 
(ToSchema a, AllAccept [*] cs, AllToResponseHeader [*] hs) => HasSwagger * (Put cs (Headers hs a)) Source 
(ToSchema a, AllAccept [*] cs) => HasSwagger * (Put cs a) Source 
AllAccept [*] cs => HasSwagger * (Patch cs ()) Source 
(ToSchema a, AllAccept [*] cs, AllToResponseHeader [*] hs) => HasSwagger * (Patch cs (Headers hs a)) Source 
(ToSchema a, AllAccept [*] cs) => HasSwagger * (Patch cs a) Source 
(ToSchema a, AllAccept [*] cs, HasSwagger k sub) => HasSwagger * ((:>) * k (ReqBody * cs a) sub) Source 
(KnownSymbol sym, ToParamSchema a, HasSwagger k sub) => HasSwagger * ((:>) * k (Header sym a) sub) Source 
(KnownSymbol sym, HasSwagger k sub) => HasSwagger * ((:>) * k (QueryFlag sym) sub) Source 
(KnownSymbol sym, ToParamSchema a, HasSwagger k sub) => HasSwagger * ((:>) * k (QueryParams * sym a) sub) Source 
(KnownSymbol sym, ToParamSchema a, HasSwagger k sub) => HasSwagger * ((:>) * k (QueryParam * sym a) sub) Source 
(KnownSymbol sym, ToParamSchema a, HasSwagger k sub) => HasSwagger * ((:>) * k (Capture * sym a) sub) Source 
(KnownSymbol sym, HasSwagger k sub) => HasSwagger * ((:>) Symbol k sym sub) Source 

subOperations Source

Arguments

:: (IsSubAPI sub api, HasSwagger sub) 
=> Proxy sub

Part of a servant API.

-> Proxy api

The whole servant API.

-> Traversal' Swagger Operation 

All operations of sub API. This is similar to operationsOf but ensures that operations indeed belong to the API at compile time.

mkEndpoint :: forall a cs hs proxy _verb. (ToSchema a, AllAccept cs, AllToResponseHeader hs) => FilePath -> Lens' PathItem (Maybe Operation) -> HttpStatusCode -> proxy (_verb cs (Headers hs a)) -> Swagger Source

noContentEndpoint :: forall cs proxy verb. AllAccept cs => FilePath -> Lens' PathItem (Maybe Operation) -> proxy (verb cs ()) -> Swagger Source

mkEndpointWithSchemaRef :: forall cs hs proxy verb a. (AllAccept cs, AllToResponseHeader hs) => Maybe (Referenced Schema) -> FilePath -> Lens' PathItem (Maybe Operation) -> HttpStatusCode -> proxy (verb cs (Headers hs a)) -> Swagger Source

addParam :: Param -> Swagger -> Swagger Source

Add parameter to every operation in the spec.

addConsumes :: [MediaType] -> Swagger -> Swagger Source

Add accepted content types to every operation in the spec.

markdownCode :: Text -> Text Source

Format given text as inline code in Markdown.

class AllAccept cs where Source

Instances

AllAccept [k] ([] k) Source 
(Accept k c, AllAccept [k] cs) => AllAccept [k] ((:) k c cs) Source