Safe Haskell | None |
---|---|
Language | Haskell2010 |
- class HasSwagger api where
- subOperations :: (IsSubAPI sub api, HasSwagger sub) => Proxy sub -> Proxy api -> Traversal' Swagger Operation
- mkEndpoint :: forall a cs hs proxy method status. (ToSchema a, AllAccept cs, AllToResponseHeader hs, SwaggerMethod method, KnownNat status) => FilePath -> proxy (Verb method status cs (Headers hs a)) -> Swagger
- mkEndpointNoContent :: forall nocontent cs hs proxy method status. (AllAccept cs, AllToResponseHeader hs, SwaggerMethod method, KnownNat status) => FilePath -> proxy (Verb method status cs (Headers hs nocontent)) -> Swagger
- mkEndpointWithSchemaRef :: forall cs hs proxy method status a. (AllAccept cs, AllToResponseHeader hs, SwaggerMethod method, KnownNat status) => Maybe (Referenced Schema) -> FilePath -> proxy (Verb method status cs (Headers hs a)) -> Swagger
- addParam :: Param -> Swagger -> Swagger
- addConsumes :: [MediaType] -> Swagger -> Swagger
- markdownCode :: Text -> Text
- addDefaultResponse404 :: ParamName -> Swagger -> Swagger
- addDefaultResponse400 :: ParamName -> Swagger -> Swagger
- class SwaggerMethod method where
- class AllAccept cs where
- class ToResponseHeader h where
- class AllToResponseHeader hs where
Documentation
class HasSwagger api where Source #
Generate a Swagger specification for a servant API.
To generate Swagger specification, your data types need
and/or ToParamSchema
instances.ToSchema
is used for ToParamSchema
, Capture
and QueryParam
.
Header
is used for ToSchema
and response data types.ReqBody
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)
:: (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
but ensures that operations
indeed belong to the API at compile time.operationsOf
:: (ToSchema a, AllAccept cs, AllToResponseHeader hs, SwaggerMethod method, KnownNat status) | |
=> FilePath | Endpoint path. |
-> proxy (Verb method status cs (Headers hs a)) | Method, content-types, headers and response. |
-> Swagger |
Make a singleton Swagger spec (with only one endpoint).
For endpoints with no content see mkEndpointNoContent
.
:: (AllAccept cs, AllToResponseHeader hs, SwaggerMethod method, KnownNat status) | |
=> FilePath | Endpoint path. |
-> proxy (Verb method status cs (Headers hs nocontent)) | Method, content-types, headers and response. |
-> Swagger |
Make a singletone Swagger
spec (with only one endpoint) and with no content schema.
mkEndpointWithSchemaRef :: forall cs hs proxy method status a. (AllAccept cs, AllToResponseHeader hs, SwaggerMethod method, KnownNat status) => Maybe (Referenced Schema) -> FilePath -> proxy (Verb method status cs (Headers hs a)) -> Swagger Source #
Like
but with explicit schema reference.
Unlike mkEndpoint
this function does not update mkEndpoint
.definitions
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 SwaggerMethod method where Source #
Methods, available for Swagger.
class ToResponseHeader h where Source #
toResponseHeader :: Proxy h -> (HeaderName, Header) Source #
(KnownSymbol sym, ToParamSchema a) => ToResponseHeader * (Header sym a) Source # | |
class AllToResponseHeader hs where Source #
AllToResponseHeader [k] ([] k) Source # | |
AllToResponseHeader [*] hs => AllToResponseHeader * (HList hs) Source # | |
(ToResponseHeader a h, AllToResponseHeader [a] hs) => AllToResponseHeader [a] ((:) a h hs) Source # | |