Files
ConfigKit/diagnostic.go

58 lines
1.5 KiB
Go

package configkit
import (
"io"
"gitea.maximumdirect.net/eric/ConfigKit/internal/engine"
)
// LoadError reports safe structured diagnostics for a failed configuration load.
// It intentionally does not expose or unwrap parser and application errors.
type LoadError struct{ value *engine.LoadError }
// Error implements error without rendering diagnostic messages or input values.
func (e *LoadError) Error() string {
if e == nil || e.value == nil {
return "configkit: configuration load failed"
}
return e.value.Error()
}
// Diagnostics returns a deep copy of the error's canonical diagnostics.
func (e *LoadError) Diagnostics() []Diagnostic {
if e == nil || e.value == nil {
return nil
}
values := e.value.Diagnostics()
if values == nil {
return nil
}
result := make([]Diagnostic, len(values))
for i := range values {
result[i] = fromEngineDiagnostic(values[i])
}
return result
}
// Sources returns a deep copy of sources discovered before loading failed.
func (e *LoadError) Sources() []SourceInfo {
if e == nil || e.value == nil {
return nil
}
values := e.value.Sources()
if values == nil {
return nil
}
result := make([]SourceInfo, len(values))
for i := range values {
result[i] = fromEngineSourceInfo(values[i])
}
return result
}
// WriteDiagnostics writes diagnostics in canonical order. It escapes terminal
// control characters and propagates writer errors, including short writes.
func WriteDiagnostics(output io.Writer, diagnostics []Diagnostic) error {
return engine.WriteDiagnostics(output, toEngineDiagnostics(diagnostics))
}