func NewGeneratorWithCustomTemplate()

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
}