func bindLong()

in pkg/genlib/generator_interface.go [575:650]


func bindLong(fieldCfg ConfigField, field Field, fieldMap map[string]any) error {
	if err := fieldCfg.ValidCounter(); err != nil {
		return err
	}

	if fieldCfg.Counter {
		var emitFNotReturn emitFNotReturn
		emitFNotReturn = func(state *genState, buf *bytes.Buffer) error {
			previous := int64(1)
			var dummyInt int64
			var dummyFunc func() int64

			if previousDummyInt, ok := state.prevCache[field.Name].(int64); ok {
				previous = previousDummyInt
			}

			if fieldCfg.Fuzziness <= 0 {
				dummyFunc = makeIntCounterFunc(previous, field)

				dummyInt = dummyFunc()
			} else {
				dummyInt = fuzzyIntCounter(previous, fieldCfg.Fuzziness)
			}

			state.prevCache[field.Name] = dummyInt
			v := make([]byte, 0, 32)
			v = strconv.AppendInt(v, dummyInt, 10)
			buf.Write(v)
			return nil
		}

		fieldMap[field.Name] = emitFNotReturn

		return nil
	}

	dummyFunc := makeIntFunc(fieldCfg, field)

	if fieldCfg.Fuzziness <= 0 {
		var emitFNotReturn emitFNotReturn
		emitFNotReturn = func(state *genState, buf *bytes.Buffer) error {
			v := make([]byte, 0, 32)
			v = strconv.AppendInt(v, dummyFunc(), 10)
			buf.Write(v)
			return nil
		}

		fieldMap[field.Name] = emitFNotReturn

		return nil
	}

	min, _ := fieldCfg.Range.MinAsFloat64()
	max, _ := fieldCfg.Range.MaxAsFloat64()

	var emitFNotReturn emitFNotReturn
	emitFNotReturn = func(state *genState, buf *bytes.Buffer) error {
		var dummyInt int64
		if previousDummyInt, ok := state.prevCache[field.Name].(int64); ok {
			if previousDummyInt == 0 {
				previousDummyInt = 1
			}
			dummyInt = fuzzyInt(previousDummyInt, fieldCfg.Fuzziness, min, max)
		} else {
			dummyInt = dummyFunc()
		}
		state.prevCache[field.Name] = dummyInt
		v := make([]byte, 0, 32)
		v = strconv.AppendInt(v, dummyInt, 10)
		buf.Write(v)
		return nil
	}

	fieldMap[field.Name] = emitFNotReturn
	return nil
}