func bindDouble()

in pkg/genlib/generator_interface.go [666:733]


func bindDouble(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 := float64(1)
			var dummyFloat float64
			var dummyFunc func() float64

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

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

				dummyFloat = dummyFunc()
			} else {
				dummyFloat = fuzzyFloatCounter(previous, fieldCfg.Fuzziness)
			}

			state.prevCache[field.Name] = dummyFloat
			_, err := fmt.Fprintf(buf, "%f", dummyFloat)
			return err
		}

		fieldMap[field.Name] = emitFNotReturn

		return nil
	}

	dummyFunc := makeFloatFunc(fieldCfg, field)

	if fieldCfg.Fuzziness <= 0 {
		var emitFNotReturn emitFNotReturn
		emitFNotReturn = func(state *genState, buf *bytes.Buffer) error {
			dummyFloat := dummyFunc()
			_, err := fmt.Fprintf(buf, "%f", dummyFloat)
			return err
		}

		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 dummyFloat float64
		if previousDummyFloat, ok := state.prevCache[field.Name].(float64); ok {
			dummyFloat = fuzzyFloat(previousDummyFloat, fieldCfg.Fuzziness, min, max)
		} else {
			dummyFloat = dummyFunc()
		}
		state.prevCache[field.Name] = dummyFloat
		_, err := fmt.Fprintf(buf, "%f", dummyFloat)

		return err
	}

	fieldMap[field.Name] = emitFNotReturn
	return nil
}