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 _verb. (ToSchema a, AllAccept cs, AllToResponseHeader hs) => FilePath -> Lens' PathItem (Maybe Operation) -> HttpStatusCode -> proxy (_verb cs (Headers hs a)) -> Swagger
- noContentEndpoint :: forall cs proxy verb. AllAccept cs => FilePath -> Lens' PathItem (Maybe Operation) -> proxy (verb cs ()) -> Swagger
- 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
- addParam :: Param -> Swagger -> Swagger
- addConsumes :: [MediaType] -> Swagger -> Swagger
- markdownCode :: Text -> Text
- addDefaultResponse404 :: ParamName -> Swagger -> Swagger
- addDefaultResponse400 :: ParamName -> Swagger -> Swagger
- class AllAccept cs where
- allContentType :: Proxy cs -> [MediaType]
- class ToResponseHeader h where
- toResponseHeader :: Proxy h -> (HeaderName, Header)
- class AllToResponseHeader hs where
- toAllResponseHeaders :: Proxy hs -> HashMap HeaderName Header
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
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
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.
addDefaultResponse404 :: ParamName -> Swagger -> Swagger Source
addDefaultResponse400 :: ParamName -> Swagger -> Swagger Source
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
toAllResponseHeaders :: Proxy hs -> HashMap HeaderName Header Source
AllToResponseHeader [*] hs => AllToResponseHeader * (HList hs) Source | |
AllToResponseHeader [k] ([] k) Source | |
(ToResponseHeader k h, AllToResponseHeader [k] hs) => AllToResponseHeader [k] ((:) k h hs) Source |