mapstructure-to-hcl2: make basic named types pointers ( optional )
This commit is contained in:
parent
d8c3385814
commit
13ea97a1df
|
@ -38,7 +38,7 @@ type FlatConfig struct {
|
||||||
Cloud *string `mapstructure:"cloud" required:"false" cty:"cloud"`
|
Cloud *string `mapstructure:"cloud" required:"false" cty:"cloud"`
|
||||||
ImageName *string `mapstructure:"image_name" required:"true" cty:"image_name"`
|
ImageName *string `mapstructure:"image_name" required:"true" cty:"image_name"`
|
||||||
ImageMetadata map[string]string `mapstructure:"metadata" required:"false" cty:"metadata"`
|
ImageMetadata map[string]string `mapstructure:"metadata" required:"false" cty:"metadata"`
|
||||||
ImageVisibility images.ImageVisibility `mapstructure:"image_visibility" required:"false" cty:"image_visibility"`
|
ImageVisibility *images.ImageVisibility `mapstructure:"image_visibility" required:"false" cty:"image_visibility"`
|
||||||
ImageMembers []string `mapstructure:"image_members" required:"false" cty:"image_members"`
|
ImageMembers []string `mapstructure:"image_members" required:"false" cty:"image_members"`
|
||||||
ImageDiskFormat *string `mapstructure:"image_disk_format" required:"false" cty:"image_disk_format"`
|
ImageDiskFormat *string `mapstructure:"image_disk_format" required:"false" cty:"image_disk_format"`
|
||||||
ImageTags []string `mapstructure:"image_tags" required:"false" cty:"image_tags"`
|
ImageTags []string `mapstructure:"image_tags" required:"false" cty:"image_tags"`
|
||||||
|
|
|
@ -450,7 +450,7 @@ func getMapstructureSquashedStruct(topPkg *types.Package, utStruct *types.Struct
|
||||||
field = types.NewField(field.Pos(), field.Pkg(), field.Name(), types.NewPointer(types.Typ[types.Bool]), field.Embedded())
|
field = types.NewField(field.Pos(), field.Pkg(), field.Name(), types.NewPointer(types.Typ[types.Bool]), field.Embedded())
|
||||||
case "github.com/hashicorp/packer/provisioner/powershell.ExecutionPolicy": // TODO(azr): unhack this situation
|
case "github.com/hashicorp/packer/provisioner/powershell.ExecutionPolicy": // TODO(azr): unhack this situation
|
||||||
field = types.NewField(field.Pos(), field.Pkg(), field.Name(), types.NewPointer(types.Typ[types.String]), field.Embedded())
|
field = types.NewField(field.Pos(), field.Pkg(), field.Name(), types.NewPointer(types.Typ[types.String]), field.Embedded())
|
||||||
}
|
default:
|
||||||
if str, isStruct := f.Underlying().(*types.Struct); isStruct {
|
if str, isStruct := f.Underlying().(*types.Struct); isStruct {
|
||||||
obj := flattenNamed(f, str)
|
obj := flattenNamed(f, str)
|
||||||
field = types.NewField(field.Pos(), field.Pkg(), field.Name(), obj, field.Embedded())
|
field = types.NewField(field.Pos(), field.Pkg(), field.Name(), obj, field.Embedded())
|
||||||
|
@ -467,6 +467,10 @@ func getMapstructureSquashedStruct(topPkg *types.Package, utStruct *types.Struct
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if _, isBasic := f.Underlying().(*types.Basic); isBasic {
|
||||||
|
field = makePointer(field)
|
||||||
|
}
|
||||||
|
}
|
||||||
case *types.Slice:
|
case *types.Slice:
|
||||||
if f, fNamed := f.Elem().(*types.Named); fNamed {
|
if f, fNamed := f.Elem().(*types.Named); fNamed {
|
||||||
if str, isStruct := f.Underlying().(*types.Struct); isStruct {
|
if str, isStruct := f.Underlying().(*types.Struct); isStruct {
|
||||||
|
|
|
@ -17,6 +17,8 @@ type FlatMockConfig struct {
|
||||||
Duration *string `mapstructure:"duration" cty:"duration"`
|
Duration *string `mapstructure:"duration" cty:"duration"`
|
||||||
MapStringString map[string]string `mapstructure:"map_string_string" cty:"map_string_string"`
|
MapStringString map[string]string `mapstructure:"map_string_string" cty:"map_string_string"`
|
||||||
SliceString []string `mapstructure:"slice_string" cty:"slice_string"`
|
SliceString []string `mapstructure:"slice_string" cty:"slice_string"`
|
||||||
|
NamedMapStringString NamedMapStringString `mapstructure:"named_map_string_string" cty:"named_map_string_string"`
|
||||||
|
NamedString *NamedString `mapstructure:"named_string" cty:"named_string"`
|
||||||
Nested *FlatNestedMockConfig `mapstructure:"nested" cty:"nested"`
|
Nested *FlatNestedMockConfig `mapstructure:"nested" cty:"nested"`
|
||||||
NestedSlice []FlatNestedMockConfig `mapstructure:"nested_slice" cty:"nested_slice"`
|
NestedSlice []FlatNestedMockConfig `mapstructure:"nested_slice" cty:"nested_slice"`
|
||||||
}
|
}
|
||||||
|
@ -41,6 +43,8 @@ func (*FlatMockConfig) HCL2Spec() map[string]hcldec.Spec {
|
||||||
"duration": &hcldec.AttrSpec{Name: "duration", Type: cty.String, Required: false},
|
"duration": &hcldec.AttrSpec{Name: "duration", Type: cty.String, Required: false},
|
||||||
"map_string_string": &hcldec.BlockAttrsSpec{TypeName: "map_string_string", ElementType: cty.String, Required: false},
|
"map_string_string": &hcldec.BlockAttrsSpec{TypeName: "map_string_string", ElementType: cty.String, Required: false},
|
||||||
"slice_string": &hcldec.AttrSpec{Name: "slice_string", Type: cty.List(cty.String), Required: false},
|
"slice_string": &hcldec.AttrSpec{Name: "slice_string", Type: cty.List(cty.String), Required: false},
|
||||||
|
"named_map_string_string": &hcldec.BlockAttrsSpec{TypeName: "named_map_string_string", ElementType: cty.String, Required: false},
|
||||||
|
"named_string": &hcldec.AttrSpec{Name: "named_string", Type: cty.String, Required: false},
|
||||||
"nested": &hcldec.BlockSpec{TypeName: "nested", Nested: hcldec.ObjectSpec((*FlatNestedMockConfig)(nil).HCL2Spec())},
|
"nested": &hcldec.BlockSpec{TypeName: "nested", Nested: hcldec.ObjectSpec((*FlatNestedMockConfig)(nil).HCL2Spec())},
|
||||||
"nested_slice": &hcldec.BlockListSpec{TypeName: "nested_slice", Nested: hcldec.ObjectSpec((*FlatNestedMockConfig)(nil).HCL2Spec())},
|
"nested_slice": &hcldec.BlockListSpec{TypeName: "nested_slice", Nested: hcldec.ObjectSpec((*FlatNestedMockConfig)(nil).HCL2Spec())},
|
||||||
}
|
}
|
||||||
|
@ -58,6 +62,8 @@ type FlatNestedMockConfig struct {
|
||||||
Duration *string `mapstructure:"duration" cty:"duration"`
|
Duration *string `mapstructure:"duration" cty:"duration"`
|
||||||
MapStringString map[string]string `mapstructure:"map_string_string" cty:"map_string_string"`
|
MapStringString map[string]string `mapstructure:"map_string_string" cty:"map_string_string"`
|
||||||
SliceString []string `mapstructure:"slice_string" cty:"slice_string"`
|
SliceString []string `mapstructure:"slice_string" cty:"slice_string"`
|
||||||
|
NamedMapStringString NamedMapStringString `mapstructure:"named_map_string_string" cty:"named_map_string_string"`
|
||||||
|
NamedString *NamedString `mapstructure:"named_string" cty:"named_string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// FlatMapstructure returns a new FlatNestedMockConfig.
|
// FlatMapstructure returns a new FlatNestedMockConfig.
|
||||||
|
@ -80,6 +86,8 @@ func (*FlatNestedMockConfig) HCL2Spec() map[string]hcldec.Spec {
|
||||||
"duration": &hcldec.AttrSpec{Name: "duration", Type: cty.String, Required: false},
|
"duration": &hcldec.AttrSpec{Name: "duration", Type: cty.String, Required: false},
|
||||||
"map_string_string": &hcldec.BlockAttrsSpec{TypeName: "map_string_string", ElementType: cty.String, Required: false},
|
"map_string_string": &hcldec.BlockAttrsSpec{TypeName: "map_string_string", ElementType: cty.String, Required: false},
|
||||||
"slice_string": &hcldec.AttrSpec{Name: "slice_string", Type: cty.List(cty.String), Required: false},
|
"slice_string": &hcldec.AttrSpec{Name: "slice_string", Type: cty.List(cty.String), Required: false},
|
||||||
|
"named_map_string_string": &hcldec.BlockAttrsSpec{TypeName: "named_map_string_string", ElementType: cty.String, Required: false},
|
||||||
|
"named_string": &hcldec.AttrSpec{Name: "named_string", Type: cty.String, Required: false},
|
||||||
}
|
}
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue