Files
2025-04-25 11:20:31 +03:00

70 lines
1.4 KiB
Go

package errors
import "fmt"
type UniverseErrorBuilder struct {
t *UniverseErrorType
message string
cause error
fields map[interface{}]any
stack ErrorStack
}
func Builder() *UniverseErrorBuilder {
return &UniverseErrorBuilder{
stack: CaptureStackIfEnabled(),
}
}
func BuilderEmpty() *UniverseErrorBuilder {
return &UniverseErrorBuilder{}
}
func (b *UniverseErrorBuilder) Message(message string) *UniverseErrorBuilder {
b.message = message
return b
}
func (b *UniverseErrorBuilder) Messagef(format string, args ...interface{}) *UniverseErrorBuilder {
b.message = fmt.Sprintf(format, args...)
return b
}
func (b *UniverseErrorBuilder) Type(typeName *UniverseErrorType) *UniverseErrorBuilder {
b.t = typeName
return b
}
func (b *UniverseErrorBuilder) Cause(cause error) *UniverseErrorBuilder {
b.cause = cause
return b
}
func (b *UniverseErrorBuilder) CaptureStackIfEnabled() *UniverseErrorBuilder {
b.stack = CaptureStackIfEnabled()
return b
}
func (b *UniverseErrorBuilder) CaptureStack() *UniverseErrorBuilder {
b.stack = CaptureStack()
return b
}
func (b *UniverseErrorBuilder) WithField(key interface{}, value interface{}) *UniverseErrorBuilder {
if b.fields == nil {
b.fields = make(map[interface{}]any)
}
b.fields[key] = value
return b
}
func (b *UniverseErrorBuilder) Build() UniverseError {
return &UniverseErrorImpl{
msg: b.message,
cause: b.cause,
fields: b.fields,
stack: b.stack,
t: b.t,
}
}