]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/hashicorp/terraform/configs/configschema/empty_value.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / configs / configschema / empty_value.go
1 package configschema
2
3 import (
4 "github.com/zclconf/go-cty/cty"
5 )
6
7 // EmptyValue returns the "empty value" for the recieving block, which for
8 // a block type is a non-null object where all of the attribute values are
9 // the empty values of the block's attributes and nested block types.
10 //
11 // In other words, it returns the value that would be returned if an empty
12 // block were decoded against the recieving schema, assuming that no required
13 // attribute or block constraints were honored.
14 func (b *Block) EmptyValue() cty.Value {
15 vals := make(map[string]cty.Value)
16 for name, attrS := range b.Attributes {
17 vals[name] = attrS.EmptyValue()
18 }
19 for name, blockS := range b.BlockTypes {
20 vals[name] = blockS.EmptyValue()
21 }
22 return cty.ObjectVal(vals)
23 }
24
25 // EmptyValue returns the "empty value" for the receiving attribute, which is
26 // the value that would be returned if there were no definition of the attribute
27 // at all, ignoring any required constraint.
28 func (a *Attribute) EmptyValue() cty.Value {
29 return cty.NullVal(a.Type)
30 }
31
32 // EmptyValue returns the "empty value" for when there are zero nested blocks
33 // present of the receiving type.
34 func (b *NestedBlock) EmptyValue() cty.Value {
35 switch b.Nesting {
36 case NestingSingle:
37 return cty.NullVal(b.Block.ImpliedType())
38 case NestingGroup:
39 return b.Block.EmptyValue()
40 case NestingList:
41 if ty := b.Block.ImpliedType(); ty.HasDynamicTypes() {
42 return cty.EmptyTupleVal
43 } else {
44 return cty.ListValEmpty(ty)
45 }
46 case NestingMap:
47 if ty := b.Block.ImpliedType(); ty.HasDynamicTypes() {
48 return cty.EmptyObjectVal
49 } else {
50 return cty.MapValEmpty(ty)
51 }
52 case NestingSet:
53 return cty.SetValEmpty(b.Block.ImpliedType())
54 default:
55 // Should never get here because the above is intended to be exhaustive,
56 // but we'll be robust and return a result nonetheless.
57 return cty.NullVal(cty.DynamicPseudoType)
58 }
59 }