// New creates and returns a Template instance which keeps the Template Engine and helps with render func New(c config.Template) *Template { defer func() { sharedFuncs = nil }() var e Engine // [ENGINE-2] switch c.Engine { case config.HTMLEngine: setSharedFuncs(sharedFuncs, c.HTMLTemplate.Funcs) e = html.New(c) // HTMLTemplate case config.JadeEngine: setSharedFuncs(sharedFuncs, c.Jade.Funcs) e = jade.New(c) // Jade case config.PongoEngine: setSharedFuncs(sharedFuncs, c.Pongo.Globals) e = pongo.New(c) // Pongo2 case config.MarkdownEngine: e = markdown.New(c) // Markdown case config.AmberEngine: setSharedFuncs(sharedFuncs, c.Amber.Funcs) e = amber.New(c) // Amber case config.HandlebarsEngine: setSharedFuncs(sharedFuncs, c.Handlebars.Helpers) e = handlebars.New(c) default: // config.NoEngine return nil } if err := e.BuildTemplates(); err != nil { // first build the templates, if error then panic because this is called before server's run panic(err) } compiledContentType := c.ContentType + "; charset=" + c.Charset t := &Template{ Engine: e, IsDevelopment: c.IsDevelopment, Gzip: c.Gzip, ContentType: compiledContentType, Layout: c.Layout, buffer: utils.NewBufferPool(64), gzipWriterPool: sync.Pool{New: func() interface{} { return &gzip.Writer{} }}, } return t }
jsonMessageType ) const ( prefix = "iris-websocket-message:" separator = ";" prefixLen = len(prefix) separatorLen = len(separator) prefixAndSepIdx = prefixLen + separatorLen - 1 prefixIdx = prefixLen - 1 separatorIdx = separatorLen - 1 ) var ( separatorByte = separator[0] buf = utils.NewBufferPool(256) prefixBytes = []byte(prefix) ) type ( messageType uint8 ) func (m messageType) String() string { return strconv.Itoa(int(m)) } func (m messageType) Name() string { if m == stringMessageType { return "string" } else if m == intMessageType {