mirror of https://github.com/hashicorp/terraform
config generation: stop editing the original schema when filtering (#35484)
* config generation: stop editing the original schema when filtering * copywrite headerspull/35405/head
parent
54f937cc3c
commit
6f89b66c5b
@ -0,0 +1,71 @@
|
||||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package configschema
|
||||
|
||||
// DeepCopy returns a deep copy of the schema.
|
||||
func (b *Block) DeepCopy() *Block {
|
||||
block := &Block{
|
||||
Description: b.Description,
|
||||
DescriptionKind: b.DescriptionKind,
|
||||
Deprecated: b.Deprecated,
|
||||
}
|
||||
|
||||
if b.Attributes != nil {
|
||||
block.Attributes = make(map[string]*Attribute, len(b.Attributes))
|
||||
}
|
||||
for name, a := range b.Attributes {
|
||||
block.Attributes[name] = a.DeepCopy()
|
||||
}
|
||||
|
||||
if b.BlockTypes != nil {
|
||||
block.BlockTypes = make(map[string]*NestedBlock, len(b.BlockTypes))
|
||||
}
|
||||
for name, bt := range b.BlockTypes {
|
||||
inner := bt.Block.DeepCopy()
|
||||
block.BlockTypes[name] = &NestedBlock{
|
||||
Block: *inner,
|
||||
Nesting: bt.Nesting,
|
||||
MinItems: bt.MinItems,
|
||||
MaxItems: bt.MaxItems,
|
||||
}
|
||||
}
|
||||
|
||||
return block
|
||||
}
|
||||
|
||||
// DeepCopy returns a deep copy of the schema.
|
||||
func (a *Attribute) DeepCopy() *Attribute {
|
||||
attr := &Attribute{
|
||||
Type: a.Type,
|
||||
Description: a.Description,
|
||||
DescriptionKind: a.DescriptionKind,
|
||||
Deprecated: a.Deprecated,
|
||||
Required: a.Required,
|
||||
Computed: a.Computed,
|
||||
Optional: a.Optional,
|
||||
Sensitive: a.Sensitive,
|
||||
|
||||
// NestedType is not copied here because it will be copied
|
||||
// separately if it is set.
|
||||
NestedType: nil,
|
||||
}
|
||||
if a.NestedType != nil {
|
||||
attr.NestedType = a.NestedType.DeepCopy()
|
||||
}
|
||||
return attr
|
||||
}
|
||||
|
||||
// DeepCopy returns a deep copy of the schema.
|
||||
func (o *Object) DeepCopy() *Object {
|
||||
object := &Object{
|
||||
Nesting: o.Nesting,
|
||||
}
|
||||
if o.Attributes != nil {
|
||||
object.Attributes = make(map[string]*Attribute, len(o.Attributes))
|
||||
for name, a := range o.Attributes {
|
||||
object.Attributes[name] = a.DeepCopy()
|
||||
}
|
||||
}
|
||||
return object
|
||||
}
|
||||
Loading…
Reference in new issue