Files
xls_doc/internal/docfill/errors.go
2026-06-24 09:45:35 +08:00

75 lines
1.8 KiB
Go

package docfill
type ErrorCode string
const (
CodeCLIUsage ErrorCode = "CLI_USAGE"
CodeConfigRead ErrorCode = "CONFIG_READ"
CodeConfigParse ErrorCode = "CONFIG_PARSE"
CodeConfigValidate ErrorCode = "CONFIG_VALIDATE"
CodeDataExcel ErrorCode = "DATA_EXCEL"
CodeDataSQLite ErrorCode = "DATA_SQLITE"
CodeDataEmpty ErrorCode = "DATA_EMPTY"
CodeDataFilterField ErrorCode = "DATA_FILTER_FIELD"
CodeDataFilterValue ErrorCode = "DATA_FILTER_VALUE"
CodeDataFilterNoMatch ErrorCode = "DATA_FILTER_NO_MATCH"
CodeDataFilterMultiMatch ErrorCode = "DATA_FILTER_MULTI_MATCH"
CodeTemplateOpen ErrorCode = "TEMPLATE_OPEN"
CodeTemplateFieldMissing ErrorCode = "TEMPLATE_FIELD_MISSING"
CodeTemplateUnresolved ErrorCode = "TEMPLATE_UNRESOLVED"
CodeOutputExists ErrorCode = "OUTPUT_EXISTS"
CodeOutputWrite ErrorCode = "OUTPUT_WRITE"
CodeInternal ErrorCode = "INTERNAL"
)
type AppError struct {
Code ErrorCode
Message string
Hint string
Context map[string]string
Cause error
}
func (e *AppError) Error() string {
if e == nil {
return ""
}
if e.Cause == nil {
return e.Message
}
return e.Message + ": " + e.Cause.Error()
}
func (e *AppError) Unwrap() error {
if e == nil {
return nil
}
return e.Cause
}
func appError(code ErrorCode, message string) *AppError {
return &AppError{
Code: code,
Message: message,
Context: make(map[string]string),
}
}
func (e *AppError) withHint(hint string) *AppError {
e.Hint = hint
return e
}
func (e *AppError) withCause(cause error) *AppError {
e.Cause = cause
return e
}
func (e *AppError) withContext(key, value string) *AppError {
if e.Context == nil {
e.Context = make(map[string]string)
}
e.Context[key] = value
return e
}