julia-server.server.mustache Maven / Gradle / Ivy
{{>partial_header}}
@doc raw"""
Encapsulates generated server code for {{packageName}}
The following server methods must be implemented:
{{#apiInfo}}
{{#apis}}
{{#operations}}
{{#operation}}
- **{{operationId}}**
- *invocation:* {{httpMethod}} {{path}}
- *signature:* {{operationId}}(req::HTTP.Request{{#allParams}}{{#required}}, {{paramName}}::{{dataType}}{{/required}}{{/allParams}};{{#allParams}}{{^required}} {{paramName}}=nothing,{{/required}}{{/allParams}}) -> {{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}Nothing{{/returnType}}
{{/operation}}
{{/operations}}
{{/apis}}
{{/apiInfo}}
"""
module {{packageName}}
using HTTP
using URIs
using Dates
using TimeZones
using OpenAPI
using OpenAPI.Servers
const API_VERSION = "{{appVersion}}"
include("modelincludes.jl")
{{#apiInfo}}{{#apis}}
include("apis/api_{{classname}}.jl"){{/apis}}{{/apiInfo}}
"""
Register handlers for all APIs in this module in the supplied `Router` instance.
Paramerets:
- `router`: Router to register handlers in
- `impl`: module that implements the server methods
Optional parameters:
- `path_prefix`: prefix to be applied to all paths
- `optional_middlewares`: Register one or more optional middlewares to be applied to all requests.
Optional middlewares can be one or more of:
- `init`: called before the request is processed
- `pre_validation`: called after the request is parsed but before validation
- `pre_invoke`: called after validation but before the handler is invoked
- `post_invoke`: called after the handler is invoked but before the response is sent
The order in which middlewares are invoked are:
`init |> read |> pre_validation |> validate |> pre_invoke |> invoke |> post_invoke`
"""
function register(router::HTTP.Router, impl; path_prefix::String="", optional_middlewares...)
{{#apiInfo}}
{{#apis}}
register{{classname}}(router, impl; path_prefix=path_prefix, optional_middlewares...)
{{/apis}}
{{/apiInfo}}
return router
end
{{#exportModels}}
# export models
{{#models}}{{#model}}export {{classname}}
{{/model}}{{/models}}
{{/exportModels}}
end # module {{packageName}}