blob: ce4845607bd7c4dc0b70c8afa2ab870ead5d4878 [file] [log] [blame] [edit]
// 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
}