in pkg/genlib/generator_with_custom_template.go [85:117]
func NewGeneratorWithCustomTemplate(template []byte, cfg Config, fields Fields, totEvents uint64) (*GeneratorWithCustomTemplate, error) {
// Parse the template and extract relevant information
orderedFields, templateFieldsMap, trailingTemplate := parseCustomTemplate(template)
// Preprocess the fields, generating appropriate emit functions
state := newGenState()
fieldMap := make(map[string]any)
fieldTypes := make(map[string]string)
for _, field := range fields {
if err := bindField(cfg, field, fieldMap, false); err != nil {
return nil, err
}
fieldTypes[field.Name] = field.Type
state.prevCacheForDup[field.Name] = make(map[any]struct{})
state.prevCacheCardinality[field.Name] = make([]any, 0)
}
// Roll into slice of emit functions
emitters := make([]emitter, 0, len(fieldMap))
for _, fieldName := range orderedFields {
emitters = append(emitters, emitter{
fieldName: fieldName,
emitFunc: fieldMap[fieldName].(emitFNotReturn),
fieldType: fieldTypes[fieldName],
prefix: templateFieldsMap[fieldName],
})
}
state.totEvents = totEvents
return &GeneratorWithCustomTemplate{emitters: emitters, trailingTemplate: trailingTemplate, totEvents: totEvents, state: state}, nil
}