in pkg/genlib/generator_interface.go [967:1082]
func bindLongWithReturn(fieldCfg ConfigField, field Field, fieldMap map[string]any) error {
if err := fieldCfg.ValidCounter(); err != nil {
return err
}
if err := fieldCfg.ValidateCounterResetStrategy(); err != nil {
return err
}
if err := fieldCfg.ValidateCounterResetAfterN(); err != nil {
return err
}
if err := fieldCfg.ValidateCounterResetProbabilistic(); err != nil {
return err
}
if len(fieldCfg.Enum) > 0 {
var emitF emitF
idx := customRand.Intn(len(fieldCfg.Enum))
f, err := strconv.ParseInt(fieldCfg.Enum[idx], 10, 64)
if err != nil {
return fmt.Errorf("field %s enum value is not a long: %w", fieldCfg.Name, err)
}
emitF = func(state *genState) any {
return f
}
fieldMap[field.Name] = emitF
return nil
}
if fieldCfg.Counter {
var emitF emitF
emitF = func(state *genState) any {
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)
}
if fieldCfg.CounterReset != nil {
switch fieldCfg.CounterReset.Strategy {
case config.CounterResetStrategyRandom:
// 50% chance to reset
if customRand.Intn(2) == 0 {
dummyInt = 0
}
case config.CounterResetStrategyProbabilistic:
// Probability% chance to reset
if customRand.Intn(100) < int(*fieldCfg.CounterReset.Probability) {
dummyInt = 0
}
case config.CounterResetStrategyAfterN:
// Reset after N
if state.counter%*fieldCfg.CounterReset.ResetAfterN == 0 {
dummyInt = 0
}
}
}
state.prevCache[field.Name] = dummyInt
return dummyInt
}
fieldMap[field.Name] = emitF
return nil
}
dummyFunc := makeIntFunc(fieldCfg, field)
if fieldCfg.Fuzziness <= 0 {
var emitF emitF
emitF = func(state *genState) any {
return dummyFunc()
}
fieldMap[field.Name] = emitF
return nil
}
min, _ := fieldCfg.Range.MinAsFloat64()
max, _ := fieldCfg.Range.MaxAsFloat64()
var emitF emitF
emitF = func(state *genState) any {
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
return dummyInt
}
fieldMap[field.Name] = emitF
return nil
}