...

Source file src/golang.conradwood.net/go-easyops/errors/shared/errortypes.go

Documentation: golang.conradwood.net/go-easyops/errors/shared

     1  package shared
     2  
     3  import (
     4  	"fmt"
     5  	"google.golang.org/grpc/status"
     6  )
     7  
     8  type StackError interface {
     9  	Stack() ErrorStackTrace
    10  }
    11  type ErrorStackTrace interface {
    12  	Positions() []*StackPos
    13  }
    14  
    15  type MyError struct {
    16  	stack ErrorStackTrace
    17  	err   error
    18  }
    19  
    20  type WrappedError struct {
    21  	stack        ErrorStackTrace
    22  	err          error
    23  	extramessage string
    24  }
    25  
    26  func NewMyError(err error, st ErrorStackTrace) *MyError {
    27  	return &MyError{err: err, stack: st}
    28  }
    29  func NewWrappedError(err error, st ErrorStackTrace) *WrappedError {
    30  	return &WrappedError{err: err, stack: st}
    31  }
    32  func NewWrappedErrorWithString(err error, st ErrorStackTrace, s string) *WrappedError {
    33  	return &WrappedError{err: err, stack: st, extramessage: s}
    34  }
    35  func (me *MyError) Stack() ErrorStackTrace {
    36  	return me.stack
    37  }
    38  func (me *MyError) Error() string {
    39  	return me.String()
    40  }
    41  func (me *MyError) String() string {
    42  	return fmt.Sprintf("%s at %s", me.err.Error(), first_non_internal_pos(me.Stack().Positions()).String())
    43  }
    44  
    45  func (me *MyError) GRPCStatus() *status.Status {
    46  	e, _ := status.FromError(me.err)
    47  	return e
    48  }
    49  func (me *WrappedError) GRPCStatus() *status.Status {
    50  	e, _ := status.FromError(me.err)
    51  	return e
    52  }
    53  
    54  func (we *WrappedError) Stack() ErrorStackTrace {
    55  	return we.stack
    56  }
    57  func (we *WrappedError) Error() string {
    58  	return we.String()
    59  }
    60  func (we *WrappedError) String() string {
    61  	if we == nil {
    62  		return "[noerror]"
    63  	}
    64  
    65  	x := ""
    66  	if we.extramessage != "" {
    67  		x = we.extramessage + ": "
    68  	}
    69  	s := fmt.Sprintf("%s%v at %s", x, we.err, first_non_internal_pos(we.Stack().Positions()).String())
    70  	wo, ok := we.err.(*WrappedError)
    71  	if ok {
    72  		s = wo.String()
    73  	}
    74  
    75  	me, ok := we.err.(*MyError)
    76  	if ok {
    77  		s = me.Error()
    78  	}
    79  
    80  	return s
    81  }
    82  

View as plain text