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)) }