2017-09-11 23:40:37 +00:00
|
|
|
package json
|
|
|
|
|
|
|
|
import (
|
|
|
|
"math/big"
|
|
|
|
|
2019-09-09 23:08:19 +00:00
|
|
|
"github.com/hashicorp/hcl/v2"
|
2017-09-11 23:40:37 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type node interface {
|
|
|
|
Range() hcl.Range
|
|
|
|
StartRange() hcl.Range
|
|
|
|
}
|
|
|
|
|
|
|
|
type objectVal struct {
|
2018-02-17 18:26:58 +00:00
|
|
|
Attrs []*objectAttr
|
2017-09-11 23:40:37 +00:00
|
|
|
SrcRange hcl.Range // range of the entire object, brace-to-brace
|
|
|
|
OpenRange hcl.Range // range of the opening brace
|
|
|
|
CloseRange hcl.Range // range of the closing brace
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *objectVal) Range() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *objectVal) StartRange() hcl.Range {
|
|
|
|
return n.OpenRange
|
|
|
|
}
|
|
|
|
|
|
|
|
type objectAttr struct {
|
|
|
|
Name string
|
|
|
|
Value node
|
|
|
|
NameRange hcl.Range // range of the name string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *objectAttr) Range() hcl.Range {
|
|
|
|
return n.NameRange
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *objectAttr) StartRange() hcl.Range {
|
|
|
|
return n.NameRange
|
|
|
|
}
|
|
|
|
|
|
|
|
type arrayVal struct {
|
|
|
|
Values []node
|
|
|
|
SrcRange hcl.Range // range of the entire object, bracket-to-bracket
|
|
|
|
OpenRange hcl.Range // range of the opening bracket
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *arrayVal) Range() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *arrayVal) StartRange() hcl.Range {
|
|
|
|
return n.OpenRange
|
|
|
|
}
|
|
|
|
|
|
|
|
type booleanVal struct {
|
|
|
|
Value bool
|
|
|
|
SrcRange hcl.Range
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *booleanVal) Range() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *booleanVal) StartRange() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
type numberVal struct {
|
|
|
|
Value *big.Float
|
|
|
|
SrcRange hcl.Range
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *numberVal) Range() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *numberVal) StartRange() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
type stringVal struct {
|
|
|
|
Value string
|
|
|
|
SrcRange hcl.Range
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *stringVal) Range() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *stringVal) StartRange() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
type nullVal struct {
|
|
|
|
SrcRange hcl.Range
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *nullVal) Range() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n *nullVal) StartRange() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
// invalidVal is used as a placeholder where a value is needed for a valid
|
|
|
|
// parse tree but the input was invalid enough to prevent one from being
|
|
|
|
// created.
|
|
|
|
type invalidVal struct {
|
|
|
|
SrcRange hcl.Range
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n invalidVal) Range() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|
|
|
|
|
|
|
|
func (n invalidVal) StartRange() hcl.Range {
|
|
|
|
return n.SrcRange
|
|
|
|
}
|