Files
steampipe/pkg/steampipeconfig/parse/decode_options.go

40 lines
918 B
Go

package parse
import (
"fmt"
"github.com/hashicorp/hcl/v2"
"github.com/hashicorp/hcl/v2/gohcl"
"github.com/turbot/steampipe/pkg/steampipeconfig/options"
)
// DecodeOptions decodes an options block
func DecodeOptions(block *hcl.Block) (options.Options, hcl.Diagnostics) {
var diags hcl.Diagnostics
var dest options.Options
switch block.Labels[0] {
case options.ConnectionBlock:
dest = &options.Connection{}
case options.DatabaseBlock:
dest = &options.Database{}
case options.TerminalBlock:
dest = &options.Terminal{}
case options.GeneralBlock:
dest = &options.General{}
default:
diags = append(diags, &hcl.Diagnostic{
Severity: hcl.DiagError,
Summary: fmt.Sprintf("Invalid options type '%s'", block.Labels[0]),
Subject: &block.DefRange,
})
return nil, diags
}
diags = gohcl.DecodeBody(block.Body, nil, dest)
if diags.HasErrors() {
return nil, diags
}
return dest, nil
}