errors.go 949 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package pogs
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. type RetryableError struct {
  7. err error
  8. Delay time.Duration
  9. }
  10. func (re *RetryableError) Error() string {
  11. return re.err.Error()
  12. }
  13. // RetryErrorAfter wraps err to indicate that client should retry after delay
  14. func RetryErrorAfter(err error, delay time.Duration) *RetryableError {
  15. return &RetryableError{
  16. err: err,
  17. Delay: delay,
  18. }
  19. }
  20. func (re *RetryableError) Unwrap() error {
  21. return re.err
  22. }
  23. // RPCError is used to indicate errors returned by the RPC subsystem rather
  24. // than failure of a remote operation
  25. type RPCError struct {
  26. err error
  27. }
  28. func (re *RPCError) Error() string {
  29. return re.err.Error()
  30. }
  31. func wrapRPCError(err error) *RPCError {
  32. if err != nil {
  33. return &RPCError{
  34. err: err,
  35. }
  36. }
  37. return nil
  38. }
  39. func newRPCError(format string, args ...interface{}) *RPCError {
  40. return &RPCError{
  41. fmt.Errorf(format, args...),
  42. }
  43. }
  44. func (re *RPCError) Unwrap() error {
  45. return re.err
  46. }