@@ -12,21 +12,20 @@ type ErrorBuilder struct {
1212 errorType * Type
1313 message string
1414 cause error
15- underlying []error
1615 mode callStackBuildMode
1716 isTransparent bool
1817}
1918
2019// NewErrorBuilder creates error builder from an existing error type.
21- func NewErrorBuilder (t * Type ) * ErrorBuilder {
20+ func NewErrorBuilder (t * Type ) ErrorBuilder {
2221 getMode := func () callStackBuildMode {
2322 if ! t .modifiers .CollectStackTrace () {
2423 return stackTraceOmit
2524 }
2625 return stackTraceCollect
2726 }
2827
29- return & ErrorBuilder {
28+ return ErrorBuilder {
3029 errorType : t ,
3130 mode : getMode (),
3231 isTransparent : t .modifiers .Transparent (),
@@ -37,7 +36,7 @@ func NewErrorBuilder(t *Type) *ErrorBuilder {
3736// For non-errorx errors, a stack trace is collected.
3837// Otherwise, it is inherited by default, as error wrapping is typically performed 'en passe'.
3938// Note that even if an original error explicitly omitted the stack trace, it could be added on wrap.
40- func (eb * ErrorBuilder ) WithCause (err error ) * ErrorBuilder {
39+ func (eb ErrorBuilder ) WithCause (err error ) ErrorBuilder {
4140 eb .cause = err
4241 if Cast (err ) != nil {
4342 eb .mode = stackTraceBorrow
@@ -50,7 +49,7 @@ func (eb *ErrorBuilder) WithCause(err error) *ErrorBuilder {
5049// Transparent wrap hides the current error type from the type checks and exposes the error type of the cause instead.
5150// The same holds true for traits, and the dynamic properties are visible from both cause and transparent wrapper.
5251// Note that if the cause error is non-errorx, transparency will still hold, type check against wrapper will still fail.
53- func (eb * ErrorBuilder ) Transparent () * ErrorBuilder {
52+ func (eb ErrorBuilder ) Transparent () ErrorBuilder {
5453 if eb .cause == nil {
5554 panic ("wrong builder usage: wrap modifier without non-nil cause" )
5655 }
@@ -64,7 +63,7 @@ func (eb *ErrorBuilder) Transparent() *ErrorBuilder {
6463// This is typically a way to handle an error received from another goroutine - say, a worker pool.
6564// When stack traces overlap, formatting makes a conservative attempt not to repeat itself,
6665// preserving the *original* stack trace in its entirety.
67- func (eb * ErrorBuilder ) EnhanceStackTrace () * ErrorBuilder {
66+ func (eb ErrorBuilder ) EnhanceStackTrace () ErrorBuilder {
6867 if eb .cause == nil {
6968 panic ("wrong builder usage: wrap modifier without non-nil cause" )
7069 }
@@ -81,7 +80,7 @@ func (eb *ErrorBuilder) EnhanceStackTrace() *ErrorBuilder {
8180// WithConditionallyFormattedMessage provides a message for an error in flexible format, to simplify its usages.
8281// Without args, leaves the original message intact, so a message may be generated or provided externally.
8382// With args, a formatting is performed, and it is therefore expected a format string to be constant.
84- func (eb * ErrorBuilder ) WithConditionallyFormattedMessage (message string , args ... interface {}) * ErrorBuilder {
83+ func (eb ErrorBuilder ) WithConditionallyFormattedMessage (message string , args ... interface {}) ErrorBuilder {
8584 if len (args ) == 0 {
8685 eb .message = message
8786 } else {
@@ -92,15 +91,15 @@ func (eb *ErrorBuilder) WithConditionallyFormattedMessage(message string, args .
9291}
9392
9493// Create returns an error with specified params.
95- func (eb * ErrorBuilder ) Create () * Error {
96- return & Error {
94+ func (eb ErrorBuilder ) Create () * Error {
95+ err := & Error {
9796 errorType : eb .errorType ,
9897 message : eb .message ,
9998 cause : eb .cause ,
100- underlying : eb .underlying ,
10199 transparent : eb .isTransparent ,
102100 stackTrace : eb .assembleStackTrace (),
103101 }
102+ return err
104103}
105104
106105type callStackBuildMode int
@@ -112,7 +111,7 @@ const (
112111 stackTraceOmit callStackBuildMode = 4
113112)
114113
115- func (eb * ErrorBuilder ) assembleStackTrace () * stackTrace {
114+ func (eb ErrorBuilder ) assembleStackTrace () * stackTrace {
116115 switch eb .mode {
117116 case stackTraceCollect :
118117 return eb .collectOriginalStackTrace ()
@@ -127,19 +126,19 @@ func (eb *ErrorBuilder) assembleStackTrace() *stackTrace {
127126 }
128127}
129128
130- func (eb * ErrorBuilder ) collectOriginalStackTrace () * stackTrace {
129+ func (eb ErrorBuilder ) collectOriginalStackTrace () * stackTrace {
131130 return collectStackTrace ()
132131}
133132
134- func (eb * ErrorBuilder ) borrowStackTraceFromCause () * stackTrace {
133+ func (eb ErrorBuilder ) borrowStackTraceFromCause () * stackTrace {
135134 originalStackTrace := eb .extractStackTraceFromCause (eb .cause )
136135 if originalStackTrace != nil {
137136 return originalStackTrace
138137 }
139138 return collectStackTrace ()
140139}
141140
142- func (eb * ErrorBuilder ) combineStackTraceWithCause () * stackTrace {
141+ func (eb ErrorBuilder ) combineStackTraceWithCause () * stackTrace {
143142 currentStackTrace := collectStackTrace ()
144143
145144 originalStackTrace := eb .extractStackTraceFromCause (eb .cause )
@@ -150,7 +149,7 @@ func (eb *ErrorBuilder) combineStackTraceWithCause() *stackTrace {
150149 return currentStackTrace
151150}
152151
153- func (eb * ErrorBuilder ) extractStackTraceFromCause (cause error ) * stackTrace {
152+ func (eb ErrorBuilder ) extractStackTraceFromCause (cause error ) * stackTrace {
154153 if typedCause := Cast (cause ); typedCause != nil {
155154 return typedCause .stackTrace
156155 }
0 commit comments