Skip to content

Commit 69fa08f

Browse files
author
Arthur Amstutz
committed
fix: Correctly marshal/unmarshal custom types when null/unknown
1 parent 15d64ac commit 69fa08f

8 files changed

+69
-21
lines changed

ovh/resource_iploadbalancing_udp_farm_gen.go

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ovh/resource_iploadbalancing_udp_frontend_gen.go

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ovh/types/bool.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,24 @@ type TfBoolValue struct {
2121
var _ basetypes.BoolValuable = TfBoolValue{}
2222

2323
func (t *TfBoolValue) UnmarshalJSON(data []byte) error {
24-
var v bool
24+
var v *bool
2525
if err := json.Unmarshal(data, &v); err != nil {
2626
return err
2727
}
2828

29-
t.BoolValue = basetypes.NewBoolValue(v)
29+
if v == nil {
30+
t.BoolValue = basetypes.NewBoolNull()
31+
} else {
32+
t.BoolValue = basetypes.NewBoolValue(*v)
33+
}
3034

3135
return nil
3236
}
3337

3438
func (t TfBoolValue) MarshalJSON() ([]byte, error) {
39+
if t.IsNull() || t.IsUnknown() {
40+
return []byte("null"), nil
41+
}
3542
return json.Marshal(t.BoolValue.ValueBool())
3643
}
3744

ovh/types/int64.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,24 @@ type TfInt64Value struct {
7272
var _ basetypes.Int64Valuable = TfInt64Value{}
7373

7474
func (t *TfInt64Value) UnmarshalJSON(data []byte) error {
75-
var v int64
75+
var v *int64
7676
if err := json.Unmarshal(data, &v); err != nil {
7777
return err
7878
}
7979

80-
t.Int64Value = basetypes.NewInt64Value(v)
80+
if v == nil {
81+
t.Int64Value = basetypes.NewInt64Null()
82+
} else {
83+
t.Int64Value = basetypes.NewInt64Value(*v)
84+
}
8185

8286
return nil
8387
}
8488

8589
func (t TfInt64Value) MarshalJSON() ([]byte, error) {
90+
if t.IsNull() || t.IsUnknown() {
91+
return []byte("null"), nil
92+
}
8693
return json.Marshal(t.Int64Value.ValueInt64())
8794
}
8895

ovh/types/list.go

+13-6
Original file line numberDiff line numberDiff line change
@@ -136,19 +136,26 @@ func (t *TfListNestedValue[T]) UnmarshalJSON(data []byte) error {
136136
return err
137137
}
138138

139-
for _, c := range v {
140-
d = append(d, c)
141-
}
142-
143139
var zero T
144-
t.ListValue = basetypes.NewListValueMust(zero.Type(context.Background()), d)
140+
141+
if v == nil {
142+
t.ListValue = basetypes.NewListNull(zero.Type(context.Background()))
143+
} else {
144+
for _, c := range v {
145+
d = append(d, c)
146+
}
147+
t.ListValue = basetypes.NewListValueMust(zero.Type(context.Background()), d)
148+
}
145149

146150
return nil
147151
}
148152

149153
func (t TfListNestedValue[T]) MarshalJSON() ([]byte, error) {
150-
var toMarshal []T
154+
if t.IsNull() || t.IsUnknown() {
155+
return []byte("null"), nil
156+
}
151157

158+
var toMarshal []T
152159
for _, elem := range t.Elements() {
153160
toMarshal = append(toMarshal, elem.(T))
154161
}

ovh/types/map.go

+21-5
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,32 @@ func (v *TfMapNestedValue[T]) UnmarshalJSON(data []byte) error {
105105
return err
106106
}
107107

108-
for k, v := range mm {
109-
d[k] = v
110-
}
111-
112108
var zero T
113-
v.MapValue = basetypes.NewMapValueMust(zero.Type(context.Background()), d)
109+
if mm == nil {
110+
v.MapValue = basetypes.NewMapNull(zero.Type(context.Background()))
111+
} else {
112+
for k, v := range mm {
113+
d[k] = v
114+
}
115+
v.MapValue = basetypes.NewMapValueMust(zero.Type(context.Background()), d)
116+
}
114117

115118
return nil
116119
}
117120

121+
func (t TfMapNestedValue[T]) MarshalJSON() ([]byte, error) {
122+
if t.IsNull() || t.IsUnknown() {
123+
return []byte("null"), nil
124+
}
125+
126+
toMarshal := make(map[string]T)
127+
for key, elem := range t.Elements() {
128+
toMarshal[key] = elem.(T)
129+
}
130+
131+
return json.Marshal(toMarshal)
132+
}
133+
118134
// ToTerraformValue returns the data contained in the Map as a tftypes.Value.
119135
func (v TfMapNestedValue[T]) ToTerraformValue(ctx context.Context) (tftypes.Value, error) {
120136

ovh/types/number.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,25 @@ type TfNumberValue struct {
7171
var _ basetypes.NumberValuable = TfNumberValue{}
7272

7373
func (t *TfNumberValue) UnmarshalJSON(data []byte) error {
74-
var v float64
74+
var v *float64
7575
if err := json.Unmarshal(data, &v); err != nil {
7676
return err
7777
}
7878

79-
t.NumberValue = basetypes.NewNumberValue(big.NewFloat(v))
79+
if v == nil {
80+
t.NumberValue = basetypes.NewNumberNull()
81+
} else {
82+
t.NumberValue = basetypes.NewNumberValue(big.NewFloat(*v))
83+
}
8084

8185
return nil
8286
}
8387

8488
func (t TfNumberValue) MarshalJSON() ([]byte, error) {
89+
if t.IsNull() || t.IsUnknown() {
90+
return []byte("null"), nil
91+
}
92+
8593
floatVal, _ := t.ValueBigFloat().Float64()
8694
return json.Marshal(floatVal)
8795
}

ovh/types/string.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,16 @@ type TfStringValue struct {
2121
var _ basetypes.StringValuable = TfStringValue{}
2222

2323
func (t *TfStringValue) UnmarshalJSON(data []byte) error {
24-
var v string
24+
var v *string
2525
if err := json.Unmarshal(data, &v); err != nil {
2626
return err
2727
}
2828

29-
t.StringValue = basetypes.NewStringValue(v)
29+
if v == nil {
30+
t.StringValue = basetypes.NewStringNull()
31+
} else {
32+
t.StringValue = basetypes.NewStringValue(*v)
33+
}
3034

3135
return nil
3236
}

0 commit comments

Comments
 (0)