70 lines
1.4 KiB
Go
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,
|
|
}
|
|
}
|