30 lines
701 B
Go
30 lines
701 B
Go
|
package configschema
|
||
|
|
||
|
import (
|
||
|
"github.com/zclconf/go-cty/cty"
|
||
|
)
|
||
|
|
||
|
// AttributeByPath looks up the Attribute schema which corresponds to the given
|
||
|
// cty.Path. A nil value is returned if the given path does not correspond to a
|
||
|
// specific attribute.
|
||
|
// TODO: this will need to be updated for nested attributes
|
||
|
func (b *Block) AttributeByPath(path cty.Path) *Attribute {
|
||
|
block := b
|
||
|
for _, step := range path {
|
||
|
switch step := step.(type) {
|
||
|
case cty.GetAttrStep:
|
||
|
if attr := block.Attributes[step.Name]; attr != nil {
|
||
|
return attr
|
||
|
}
|
||
|
|
||
|
if nestedBlock := block.BlockTypes[step.Name]; nestedBlock != nil {
|
||
|
block = &nestedBlock.Block
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|