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
}