json: Allow null values for block attributes (#87)
* json: Handle Null block atttributes * json: Ignore null values when collecting deep attributes
This commit is contained in:
parent
504b920607
commit
fb2bc46cdb
@ -266,6 +266,9 @@ func (b *body) unpackBlock(v node, typeName string, typeRange *hcl.Range, labels
|
|||||||
copy(labelR, labelRanges)
|
copy(labelR, labelRanges)
|
||||||
|
|
||||||
switch tv := v.(type) {
|
switch tv := v.(type) {
|
||||||
|
case *nullVal:
|
||||||
|
// There is no block content, e.g the value is null.
|
||||||
|
return
|
||||||
case *objectVal:
|
case *objectVal:
|
||||||
// Single instance of the block
|
// Single instance of the block
|
||||||
*blocks = append(*blocks, &hcl.Block{
|
*blocks = append(*blocks, &hcl.Block{
|
||||||
@ -324,6 +327,8 @@ func (b *body) collectDeepAttrs(v node, labelName *string) ([]*objectAttr, hcl.D
|
|||||||
var attrs []*objectAttr
|
var attrs []*objectAttr
|
||||||
|
|
||||||
switch tv := v.(type) {
|
switch tv := v.(type) {
|
||||||
|
case *nullVal:
|
||||||
|
// If a value is null, then we don't return any attributes or return an error.
|
||||||
|
|
||||||
case *objectVal:
|
case *objectVal:
|
||||||
attrs = append(attrs, tv.Attrs...)
|
attrs = append(attrs, tv.Attrs...)
|
||||||
|
@ -301,6 +301,48 @@ func TestBodyPartialContent(t *testing.T) {
|
|||||||
},
|
},
|
||||||
1,
|
1,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
`{"resource": null}`,
|
||||||
|
&hcl.BodySchema{
|
||||||
|
Blocks: []hcl.BlockHeaderSchema{
|
||||||
|
{
|
||||||
|
Type: "resource",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&hcl.BodyContent{
|
||||||
|
Attributes: map[string]*hcl.Attribute{},
|
||||||
|
// We don't find any blocks if the value is json null.
|
||||||
|
Blocks: nil,
|
||||||
|
MissingItemRange: hcl.Range{
|
||||||
|
Filename: "test.json",
|
||||||
|
Start: hcl.Pos{Line: 1, Column: 18, Byte: 17},
|
||||||
|
End: hcl.Pos{Line: 1, Column: 19, Byte: 18},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
`{"resource": { "nested": null }}`,
|
||||||
|
&hcl.BodySchema{
|
||||||
|
Blocks: []hcl.BlockHeaderSchema{
|
||||||
|
{
|
||||||
|
Type: "resource",
|
||||||
|
LabelNames: []string{"name"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&hcl.BodyContent{
|
||||||
|
Attributes: map[string]*hcl.Attribute{},
|
||||||
|
Blocks: nil,
|
||||||
|
MissingItemRange: hcl.Range{
|
||||||
|
Filename: "test.json",
|
||||||
|
Start: hcl.Pos{Line: 1, Column: 32, Byte: 31},
|
||||||
|
End: hcl.Pos{Line: 1, Column: 33, Byte: 32},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
0,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
`{"resource":{}}`,
|
`{"resource":{}}`,
|
||||||
&hcl.BodySchema{
|
&hcl.BodySchema{
|
||||||
|
Loading…
Reference in New Issue
Block a user