kubeform.dev/terraform-backend-sdk@v0.0.0-20220310143633-45f07fe731c5/configs/configschema/none_required.go (about)

     1  package configschema
     2  
     3  // NoneRequired returns a deep copy of the receiver with any required
     4  // attributes translated to optional.
     5  func (b *Block) NoneRequired() *Block {
     6  	ret := &Block{}
     7  
     8  	if b.Attributes != nil {
     9  		ret.Attributes = make(map[string]*Attribute, len(b.Attributes))
    10  	}
    11  	for name, attrS := range b.Attributes {
    12  		ret.Attributes[name] = attrS.forceOptional()
    13  	}
    14  
    15  	if b.BlockTypes != nil {
    16  		ret.BlockTypes = make(map[string]*NestedBlock, len(b.BlockTypes))
    17  	}
    18  	for name, blockS := range b.BlockTypes {
    19  		ret.BlockTypes[name] = blockS.noneRequired()
    20  	}
    21  
    22  	return ret
    23  }
    24  
    25  func (b *NestedBlock) noneRequired() *NestedBlock {
    26  	ret := *b
    27  	ret.Block = *(ret.Block.NoneRequired())
    28  	ret.MinItems = 0
    29  	ret.MaxItems = 0
    30  	return &ret
    31  }
    32  
    33  func (a *Attribute) forceOptional() *Attribute {
    34  	ret := *a
    35  	ret.Optional = true
    36  	ret.Required = false
    37  	return &ret
    38  }