| package tfdiags |
| |
| import ( |
| "fmt" |
| |
| "github.com/hashicorp/hcl/v2" |
| ) |
| |
| type Diagnostic interface { |
| Severity() Severity |
| Description() Description |
| Source() Source |
| |
| // FromExpr returns the expression-related context for the diagnostic, if |
| // available. Returns nil if the diagnostic is not related to an |
| // expression evaluation. |
| FromExpr() *FromExpr |
| |
| // ExtraInfo returns the raw extra information value. This is a low-level |
| // API which requires some work on the part of the caller to properly |
| // access associated information, so in most cases it'll be more convienient |
| // to use the package-level ExtraInfo function to try to unpack a particular |
| // specialized interface from this value. |
| ExtraInfo() interface{} |
| } |
| |
| type Severity rune |
| |
| //go:generate go run golang.org/x/tools/cmd/stringer -type=Severity |
| |
| const ( |
| Error Severity = 'E' |
| Warning Severity = 'W' |
| ) |
| |
| // ToHCL converts a Severity to the equivalent HCL diagnostic severity. |
| func (s Severity) ToHCL() hcl.DiagnosticSeverity { |
| switch s { |
| case Warning: |
| return hcl.DiagWarning |
| case Error: |
| return hcl.DiagError |
| default: |
| // The above should always be exhaustive for all of the valid |
| // Severity values in this package. |
| panic(fmt.Sprintf("unknown diagnostic severity %s", s)) |
| } |
| } |
| |
| type Description struct { |
| Address string |
| Summary string |
| Detail string |
| } |
| |
| type Source struct { |
| Subject *SourceRange |
| Context *SourceRange |
| } |
| |
| type FromExpr struct { |
| Expression hcl.Expression |
| EvalContext *hcl.EvalContext |
| } |