installerbuilder/internal/errors/error.go

69 lines
1.5 KiB
Go

// Package errors 提供错误处理框架
package errors
import (
"fmt"
)
// Error 表示构建过程中的错误
type Error interface {
error
// Code 返回错误代码
Code() string
// Component 返回发生错误的组件
Component() string
// Details 返回详细错误信息
Details() map[string]interface{}
}
// BuildError 实现了Error接口
type BuildError struct {
code string
component string
message string
details map[string]interface{}
cause error
}
// NewBuildError 创建一个新的BuildError
func NewBuildError(code, component, message string, cause error, details map[string]interface{}) *BuildError {
if details == nil {
details = make(map[string]interface{})
}
return &BuildError{
code: code,
component: component,
message: message,
details: details,
cause: cause,
}
}
// Error 实现error接口
func (e *BuildError) Error() string {
if e.cause != nil {
return fmt.Sprintf("[%s] %s: %s (caused by: %v)", e.code, e.component, e.message, e.cause)
}
return fmt.Sprintf("[%s] %s: %s", e.code, e.component, e.message)
}
// Code 返回错误代码
func (e *BuildError) Code() string {
return e.code
}
// Component 返回发生错误的组件
func (e *BuildError) Component() string {
return e.component
}
// Details 返回详细错误信息
func (e *BuildError) Details() map[string]interface{} {
return e.details
}
// Unwrap 返回底层错误
func (e *BuildError) Unwrap() error {
return e.cause
}