You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraformDummyRepo2/vendor/github.com/hashicorp/terraform-plugin-docs/schemamd/behaviors.go

80 lines
1.8 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package schemamd
import (
tfjson "github.com/hashicorp/terraform-json"
)
func childAttributeIsRequired(att *tfjson.SchemaAttribute) bool {
return att.Required
}
func childBlockIsRequired(block *tfjson.SchemaBlockType) bool {
return block.MinItems > 0
}
func childAttributeIsOptional(att *tfjson.SchemaAttribute) bool {
return att.Optional
}
// childBlockIsOptional returns true for blocks with with min items 0
// which are either empty or have any required or optional children.
func childBlockIsOptional(block *tfjson.SchemaBlockType) bool {
if block.MinItems > 0 {
return false
}
if len(block.Block.NestedBlocks) == 0 && len(block.Block.Attributes) == 0 {
return true
}
for _, childBlock := range block.Block.NestedBlocks {
if childBlockIsRequired(childBlock) {
return true
}
if childBlockIsOptional(childBlock) {
return true
}
}
for _, childAtt := range block.Block.Attributes {
if childAttributeIsRequired(childAtt) {
return true
}
if childAttributeIsOptional(childAtt) {
return true
}
}
return false
}
// Read-only is computed but not optional.
func childAttributeIsReadOnly(att *tfjson.SchemaAttribute) bool {
// these shouldn't be able to be required, but just in case
return att.Computed && !att.Optional && !att.Required
}
// childBlockIsReadOnly returns true for blocks where all leaves are read-only.
func childBlockIsReadOnly(block *tfjson.SchemaBlockType) bool {
if block.MinItems != 0 || block.MaxItems != 0 {
return false
}
for _, childBlock := range block.Block.NestedBlocks {
if !childBlockIsReadOnly(childBlock) {
return false
}
}
for _, childAtt := range block.Block.Attributes {
if !childAttributeIsReadOnly(childAtt) {
return false
}
}
return true
}