Skip to content

Commit bef23d5

Browse files
committed
fix bug where generation function was not restting after function holder was copied
1 parent 8c1b8d4 commit bef23d5

7 files changed

Lines changed: 35 additions & 23 deletions

File tree

dstruct.generated.struct.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,12 +339,21 @@ func (gs *DStructGeneratedStruct[T]) createGeneratedField(
339339
field *Node[structField],
340340
kind reflect.Kind,
341341
) *core.GeneratedField {
342-
return core.NewGeneratedField(field.data.fullyQualifiedName,
342+
v := core.NewGeneratedField(field.data.fullyQualifiedName,
343343
field.data.value,
344344
field.data.tag,
345345
gs.structConfig.Copy(kind),
346346
gs.customTypes,
347347
field.data.goType)
348+
fmt.Printf(
349+
"\nStruct Config address: %p\n",
350+
gs.structConfig.GenerationFunctions[reflect.Int].GetConfig().Number(),
351+
)
352+
fmt.Printf(
353+
"\nConfig address: %p\n",
354+
v.Config.GenerationFunctions[reflect.Int].GetConfig().Number(),
355+
)
356+
return v
348357
}
349358

350359
func (gs *DStructGeneratedStruct[T]) populateGeneratedFields(node *Node[structField]) {

generator/config/dstruct.config.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ type DstructConfig struct {
55
SliceConfig SliceConfig
66
NumberConfig NumberRangeConfig
77
DateConfig DateRangeConfig
8+
children []Config
89
}
910

1011
// NewDstructConfig is a constructor for DstructConfig.
@@ -51,6 +52,9 @@ func (c *DstructConfig) Number() NumberRangeConfig {
5152
// SetSliceLength implements Config.SetSliceLength.
5253
func (c *DstructConfig) SetSliceLength(min, max int) Config {
5354
c.SliceConfig.SetLengthRange(min, max)
55+
for _, sub := range c.children {
56+
sub.SetSliceLength(min, max)
57+
}
5458
return c
5559
}
5660

generator/config/dstruct.number.range.config.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package config
22

3-
import (
4-
"fmt"
5-
)
6-
73
// DstructNumberRangeConfig implements NumberRangeConfig.
84
type DstructNumberRangeConfig struct {
95
IntConfig NumberRange[int]
@@ -109,8 +105,6 @@ func (nc *DstructNumberRangeConfig) UIntPtr() *NumberRange[uintptr] {
109105

110106
// Copy implements NumberConfig.Copy.
111107
func (nc *DstructNumberRangeConfig) Copy() NumberRangeConfig {
112-
fmt.Println("Copying DstructNumberRangeConfig ")
113-
fmt.Println(nc.Int().RangeRef())
114108
numberConfigCopy := new(DstructNumberRangeConfig)
115109
*numberConfigCopy = *nc
116110
return numberConfigCopy

generator/core/function.holder.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ type FunctionHolder interface {
1616
Kind() reflect.Kind
1717
}
1818

19+
type ResetFunction func(config config.Config) generator.GenerationFunction
20+
1921
type BaseFunctionHolder struct {
2022
config config.Config
2123
generationFunction generator.GenerationFunction
2224
fun any
25+
resetFunction ResetFunction
2326
}
2427

2528
func (c *BaseFunctionHolder) SetFunction(generationFunction generator.GenerationFunction) {
@@ -35,8 +38,8 @@ func (c *BaseFunctionHolder) GetConfig() config.Config {
3538
}
3639

3740
func (c *BaseFunctionHolder) SetConfig(cfg config.Config) {
38-
c.generationFunction = nil // new config recreate generation function
3941
c.config = cfg
42+
c.generationFunction = c.resetFunction(cfg)
4043
}
4144

4245
func (c *BaseFunctionHolder) Copy() BaseFunctionHolder {
@@ -49,7 +52,7 @@ func (c *BaseFunctionHolder) Copy() BaseFunctionHolder {
4952
return BaseFunctionHolder{
5053
fun: c.fun,
5154
config: configCopy,
52-
generationFunction: c.generationFunction,
55+
generationFunction: c.resetFunction(configCopy),
5356
}
5457
}
5558

generator/core/generated.field.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,5 +289,9 @@ func (field *GeneratedField) getGenerationFunction() generator.GenerationFunctio
289289

290290
// if we get no match, we default to the default generation function for the kind
291291
// kidds of type Slice will be handled here as their default generation function for a slice will be overwritten when the generated field is created.
292+
fmt.Printf(
293+
"Returning function ref: %p\n",
294+
field.Config.GenerationFunctions[kind].GetConfig().Number(),
295+
)
292296
return field.Config.GenerationFunctions[kind].GetFunction()
293297
}

generator/core/number.function.holder.go

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"github.com/MartinSimango/dstruct/generator/config"
66
)
77

8-
// TODO: rename to NumberFunctionHolderFunc?
98
type NumberFunctionHolderFunc func(config.NumberRangeConfig) generator.GenerationFunction
109

1110
type NumberFunctionHolder struct {
@@ -18,27 +17,23 @@ func NewNumberFunctionHolder(
1817
f NumberFunctionHolderFunc,
1918
cfg config.NumberRangeConfig,
2019
) *NumberFunctionHolder {
21-
return &NumberFunctionHolder{
20+
nfh := &NumberFunctionHolder{
2221
BaseFunctionHolder: BaseFunctionHolder{
23-
config: config.NewDstructConfigBuilder().WithNumberConfig(cfg).Build(),
24-
fun: f,
22+
config: config.NewDstructConfigBuilder().WithNumberConfig(cfg).Build(),
23+
fun: f,
24+
resetFunction: func(cfg config.Config) generator.GenerationFunction {
25+
return f(cfg.Number())
26+
},
2527
generationFunction: f(cfg),
2628
},
2729
}
28-
}
29-
30-
// Override
31-
func (c *NumberFunctionHolder) GetFunction() generator.GenerationFunction {
32-
if c.generationFunction != nil {
33-
return c.generationFunction
34-
}
35-
c.generationFunction = c.fun.(NumberFunctionHolderFunc)(c.config.Number())
3630

37-
return c.generationFunction
31+
return nfh
3832
}
3933

4034
func (c *NumberFunctionHolder) Copy() FunctionHolder {
41-
return &NumberFunctionHolder{
35+
nf := &NumberFunctionHolder{
4236
BaseFunctionHolder: c.BaseFunctionHolder.Copy(),
4337
}
38+
return nf
4439
}

generator/core/number.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@ func GenerateNumberFunc[n config.Number](
1818
) generator.GenerationFunction {
1919
// get reference to min and max so when the function is called, it will use the current value
2020
min, max := getNumberRange[n](cfg)
21+
2122
return &coreGenerationFunction{
2223
_func: func(parameters ...any) any {
24+
fmt.Println("Refernece to min and max: ", min, max)
25+
fmt.Printf("Cfg: %p\n", cfg)
2326
return generateNum(*min, *max)
2427
},
2528
kind: reflect.ValueOf(*new(n)).Kind(),

0 commit comments

Comments
 (0)