shithub: hugo

ref: 358dcce7a6b4a8100964597f81cf371451f6c4d3
dir: /transform/chain.go/

View raw version
package transform

import (
	"io"

	bp "github.com/spf13/hugo/bufferpool"
)

type trans func([]byte) []byte

type link trans

type chain []link

func NewChain(trs ...link) chain {
	return trs
}

func NewEmptyTransforms() []link {
	return make([]link, 0, 20)
}

func (c *chain) Apply(w io.Writer, r io.Reader) (err error) {
	buffer := bp.GetBuffer()
	defer bp.PutBuffer(buffer)

	buffer.ReadFrom(r)
	b := buffer.Bytes()
	for _, tr := range *c {
		b = tr(b)
	}
	buffer.Reset()
	buffer.Write(b)
	buffer.WriteTo(w)
	return
}