Generate a OpenApi specification for a servant API.
To generate OpenApi 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
openapi3 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
myOpenApi :: OpenApi
myOpenApi = toOpenApi (Proxy :: Proxy MyAPI)
Instances29HasOpenApi, …
HasOpenApi EmptyAPIDefined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalHasOpenApi RawDefined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalHasOpenApi (ToServantApi sub) => HasOpenApi (NamedRoutes sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalOpenApiMethod method => HasOpenApi (NoContentVerb method)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(HasOpenApi a, HasOpenApi b) => HasOpenApi (a :<|> b)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalHasOpenApi (UVerb method cs '[])Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalHasOpenApi sub => HasOpenApi (HttpVersion :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalHttpVersioncombinator does not change our specification at all.HasOpenApi sub => HasOpenApi (Fragment a :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalHasOpenApi sub => HasOpenApi (IsSecure :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalIsSecurecombinator does not change our specification at all.HasOpenApi sub => HasOpenApi (RemoteHost :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalRemoteHostcombinator does not change our specification at all.HasOpenApi sub => HasOpenApi (Vault :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalVaultcombinator does not change our specification at all.(KnownSymbol desc, HasOpenApi api) => HasOpenApi (Description desc :> api)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(KnownSymbol desc, HasOpenApi api) => HasOpenApi (Summary desc :> api)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(KnownSymbol sym, ToParamSchema a, HasOpenApi sub) => HasOpenApi (CaptureAll sym a :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalOpenApi Spec doesn't have a notion of CaptureAll, this instance is the best effort.
(KnownSymbol sym, ToParamSchema a, HasOpenApi sub) => HasOpenApi (QueryParams sym a :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(KnownSymbol sym, ToParamSchema a, HasOpenApi sub, KnownSymbol (FoldDescription mods)) => HasOpenApi (Capture' mods sym a :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(KnownSymbol sym, ToParamSchema a, HasOpenApi sub, SBoolI (FoldRequired mods), KnownSymbol (FoldDescription mods)) => HasOpenApi (Header' mods sym a :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(KnownSymbol sym, ToParamSchema a, HasOpenApi sub, SBoolI (FoldRequired mods), KnownSymbol (FoldDescription mods)) => HasOpenApi (QueryParam' mods sym a :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(KnownSymbol sym, HasOpenApi sub) => HasOpenApi (QueryFlag sym :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(KnownSymbol sym, HasOpenApi sub) => HasOpenApi (sym :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(ToSchema a, Accept ct, HasOpenApi sub, KnownSymbol (FoldDescription mods)) => HasOpenApi (StreamBody' mods fr ct a :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalThis instance is an approximation.
(ToSchema a, HasStatus a, AllAccept cs, OpenApiMethod method, HasOpenApi (UVerb method cs as)) => HasOpenApi (UVerb method cs (a ': as))Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal@since 2.0.1.0
(ToSchema a, AllAccept cs, HasOpenApi sub, KnownSymbol (FoldDescription mods)) => HasOpenApi (ReqBody' mods cs a :> sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalHasOpenApi sub => HasOpenApi (WithNamedContext x c sub)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.InternalWithNamedContextcombinator does not change our specification at all.(ToSchema a, AllAccept cs, KnownNat status, OpenApiMethod method) => HasOpenApi (Verb method status cs a)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(ToSchema a, AllAccept cs, AllToResponseHeader hs, KnownNat status, OpenApiMethod method) => HasOpenApi (Verb method status cs (Headers hs a))Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(AllAccept cs, KnownNat status, OpenApiMethod method) => HasOpenApi (Verb method status cs NoContent)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(AllAccept cs, AllToResponseHeader hs, KnownNat status, OpenApiMethod method) => HasOpenApi (Verb method status cs (Headers hs NoContent))Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal(ToSchema a, Accept ct, KnownNat status, OpenApiMethod method) => HasOpenApi (Stream method status fr ct a)Defined in servant-openapi3-2.0.1.6 · Servant.OpenApi.Internal