func NewGeneratorWithTextTemplate()

in pkg/genlib/generator_with_text_template.go [51:98]


func NewGeneratorWithTextTemplate(tpl []byte, cfg Config, fields Fields, totEvents uint64) (*GeneratorWithTextTemplate, error) {
	// Preprocess the fields, generating appropriate bound function
	state := newGenState()
	fieldMap := make(map[string]any)
	for _, field := range fields {
		if err := bindField(cfg, field, fieldMap, true); err != nil {
			return nil, err
		}

		state.prevCacheForDup[field.Name] = make(map[any]struct{})
		state.prevCacheCardinality[field.Name] = make([]any, 0)
	}

	errChan := make(chan error)

	templateFns := sprig.TxtFuncMap()

	templateFns["awsAZFromRegion"] = func(region string) string {
		azs, ok := awsAZs[region]
		if !ok {
			return "NoAZ"
		}

		return azs[rand.Intn(len(azs))]
	}

	templateFns["generate"] = func(field string) any {
		bindF, ok := fieldMap[field].(emitF)
		if !ok {
			close(errChan)
			return nil
		}

		return bindF(state)
	}

	t := template.New("generator")
	t = t.Option("missingkey=error")

	parsedTpl, err := t.Funcs(templateFns).Parse(string(tpl))
	if err != nil {
		return nil, err
	}

	state.totEvents = totEvents

	return &GeneratorWithTextTemplate{tpl: parsedTpl, totEvents: totEvents, state: state, errChan: errChan}, nil
}