mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
HCL's diagnostic model now includes the idea of "extra information" which works by attaching an initially-opaque interface value to each diagnostic and then asking callers to type-assert against that value to sniff for particular interfaces in order to discover additional machine-readable context about a certain diagnostic message. This commit echoes that idea into our tfdiags API, for now only for diagnostics that are backed by an hcl.Diagnostic. All other implementations of the diagnostic interface just always return nil, which means they never carry any "extra information". As is typical for our wrapping abstraction, we have here also a modified copy of HCL's helper function for conveniently probing a diagnostic for information of a particular type, designed to work with our diagnostic interface instead of HCL's concrete diagnostic type.
38 lines
883 B
Go
38 lines
883 B
Go
package tfdiags
|
|
|
|
// diagnosticBase can be embedded in other diagnostic structs to get
|
|
// default implementations of Severity and Description. This type also
|
|
// has default implementations of Source and FromExpr that return no source
|
|
// location or expression-related information, so embedders should generally
|
|
// override those method to return more useful results where possible.
|
|
type diagnosticBase struct {
|
|
severity Severity
|
|
summary string
|
|
detail string
|
|
address string
|
|
}
|
|
|
|
func (d diagnosticBase) Severity() Severity {
|
|
return d.severity
|
|
}
|
|
|
|
func (d diagnosticBase) Description() Description {
|
|
return Description{
|
|
Summary: d.summary,
|
|
Detail: d.detail,
|
|
Address: d.address,
|
|
}
|
|
}
|
|
|
|
func (d diagnosticBase) Source() Source {
|
|
return Source{}
|
|
}
|
|
|
|
func (d diagnosticBase) FromExpr() *FromExpr {
|
|
return nil
|
|
}
|
|
|
|
func (d diagnosticBase) ExtraInfo() interface{} {
|
|
return nil
|
|
}
|