forked from ebhomengo/niki
				
			feat(pkg): add richerror
This commit is contained in:
		
							parent
							
								
									370ca1da1f
								
							
						
					
					
						commit
						cec13c8bbe
					
				| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
package richerror
 | 
			
		||||
 | 
			
		||||
type Kind int
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	KindInvalid Kind = iota + 1
 | 
			
		||||
	KindForbidden
 | 
			
		||||
	KindNotFound
 | 
			
		||||
	KindUnexpected
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Op string
 | 
			
		||||
 | 
			
		||||
type RichError struct {
 | 
			
		||||
	operation    Op
 | 
			
		||||
	wrappedError error
 | 
			
		||||
	message      string
 | 
			
		||||
	kind         Kind
 | 
			
		||||
	meta         map[string]interface{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func New(op Op) RichError {
 | 
			
		||||
	return RichError{operation: op}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r RichError) WithOp(op Op) RichError {
 | 
			
		||||
	r.operation = op
 | 
			
		||||
	return r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r RichError) WithErr(err error) RichError {
 | 
			
		||||
	r.wrappedError = err
 | 
			
		||||
	return r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r RichError) WithMessage(message string) RichError {
 | 
			
		||||
	r.message = message
 | 
			
		||||
	return r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r RichError) WithKind(kind Kind) RichError {
 | 
			
		||||
	r.kind = kind
 | 
			
		||||
	return r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r RichError) WithMeta(meta map[string]interface{}) RichError {
 | 
			
		||||
	r.meta = meta
 | 
			
		||||
	return r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r RichError) Error() string {
 | 
			
		||||
	if r.message == "" {
 | 
			
		||||
		return r.wrappedError.Error()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return r.message
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r RichError) Kind() Kind {
 | 
			
		||||
	if r.kind != 0 {
 | 
			
		||||
		return r.kind
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	re, ok := r.wrappedError.(RichError)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return re.Kind()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r RichError) Message() string {
 | 
			
		||||
	if r.message != "" {
 | 
			
		||||
		return r.message
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	re, ok := r.wrappedError.(RichError)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return r.wrappedError.Error()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return re.Message()
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue