/
server.go
34 lines (31 loc) · 924 Bytes
/
server.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package renderer
import "github.com/rs/xhandler"
// New - New renderer web server API handler.
// Context should have a compiler set with `compiler.NewContext`.
// To always render HTML instead of JSON on Accept `application/json`
// use `WithAlwaysHTML()` option.
//
// Default options are:
//
// * WithTimeout(time.Second * 15),
// * WithComponentSetter(UnmarshalFromRequest()),
//
func New(opts ...Option) xhandler.HandlerC {
return construct(constructOpts(opts...))
}
func construct(o *webOptions) xhandler.HandlerC {
var chain xhandler.Chain
chain.UseC(xhandler.CloseHandler)
chain.UseC(xhandler.TimeoutHandler(o.reqTimeout))
chain.UseC(o.componentSetter)
chain.UseC(o.templateCtxSetter)
for _, m := range o.middlewares {
chain.UseC(m)
}
chain.UseC(CompileInContext)
chain.UseC(RenderInContext)
if o.alwaysHTML {
return chain.HandlerCF(WriteRenderedHTML)
}
return chain.HandlerCF(WriteRendered)
}