Beispiel #1
0
// 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

}
Beispiel #2
0
	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 {