mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-28 01:41:48 -06:00
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package tfdiags
|
|
|
|
// overriddenDiagnostic implements the Diagnostic interface by wrapping another
|
|
// Diagnostic while overriding the severity of the original Diagnostic.
|
|
type overriddenDiagnostic struct {
|
|
original Diagnostic
|
|
severity Severity
|
|
extra interface{}
|
|
}
|
|
|
|
var _ Diagnostic = overriddenDiagnostic{}
|
|
|
|
// OverrideAll accepts a set of Diagnostics and wraps them with a new severity
|
|
// and, optionally, a new ExtraInfo.
|
|
func OverrideAll(originals Diagnostics, severity Severity, createExtra func() DiagnosticExtraWrapper) Diagnostics {
|
|
var diags Diagnostics
|
|
for _, diag := range originals {
|
|
diags = diags.Append(Override(diag, severity, createExtra))
|
|
}
|
|
return diags
|
|
}
|
|
|
|
// Override matches OverrideAll except it operates over a single Diagnostic
|
|
// rather than multiple Diagnostics.
|
|
func Override(original Diagnostic, severity Severity, createExtra func() DiagnosticExtraWrapper) Diagnostic {
|
|
extra := original.ExtraInfo()
|
|
if createExtra != nil {
|
|
nw := createExtra()
|
|
nw.WrapDiagnosticExtra(extra)
|
|
extra = nw
|
|
}
|
|
|
|
return overriddenDiagnostic{
|
|
original: original,
|
|
severity: severity,
|
|
extra: extra,
|
|
}
|
|
}
|
|
|
|
// UndoOverride will return the original diagnostic that was overridden within
|
|
// the OverrideAll function.
|
|
//
|
|
// If the provided Diagnostic was never overridden then it is simply returned
|
|
// unchanged.
|
|
func UndoOverride(diag Diagnostic) Diagnostic {
|
|
if override, ok := diag.(overriddenDiagnostic); ok {
|
|
return override.original
|
|
}
|
|
|
|
// Then it wasn't overridden, so we'll just return the diag unchanged.
|
|
return diag
|
|
}
|
|
|
|
func (o overriddenDiagnostic) Severity() Severity {
|
|
return o.severity
|
|
}
|
|
|
|
func (o overriddenDiagnostic) Description() Description {
|
|
return o.original.Description()
|
|
}
|
|
|
|
func (o overriddenDiagnostic) Source() Source {
|
|
return o.original.Source()
|
|
}
|
|
|
|
func (o overriddenDiagnostic) FromExpr() *FromExpr {
|
|
return o.original.FromExpr()
|
|
}
|
|
|
|
func (o overriddenDiagnostic) ExtraInfo() interface{} {
|
|
return o.extra
|
|
}
|