parse.go (892B)
1 package hcl 2 3 import ( 4 "fmt" 5 6 "github.com/hashicorp/hcl/hcl/ast" 7 hclParser "github.com/hashicorp/hcl/hcl/parser" 8 jsonParser "github.com/hashicorp/hcl/json/parser" 9 ) 10 11 // ParseBytes accepts as input byte slice and returns ast tree. 12 // 13 // Input can be either JSON or HCL 14 func ParseBytes(in []byte) (*ast.File, error) { 15 return parse(in) 16 } 17 18 // ParseString accepts input as a string and returns ast tree. 19 func ParseString(input string) (*ast.File, error) { 20 return parse([]byte(input)) 21 } 22 23 func parse(in []byte) (*ast.File, error) { 24 switch lexMode(in) { 25 case lexModeHcl: 26 return hclParser.Parse(in) 27 case lexModeJson: 28 return jsonParser.Parse(in) 29 } 30 31 return nil, fmt.Errorf("unknown config format") 32 } 33 34 // Parse parses the given input and returns the root object. 35 // 36 // The input format can be either HCL or JSON. 37 func Parse(input string) (*ast.File, error) { 38 return parse([]byte(input)) 39 }