errors.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package pia
  2. import (
  3. "errors"
  4. "fmt"
  5. )
  6. const (
  7. CodeInvalidInput = "pia_invalid_input"
  8. CodeInvalidCredentials = "pia_invalid_credentials"
  9. CodeAuthenticationUnavailable = "pia_authentication_unavailable"
  10. CodeTokenRejected = "pia_token_rejected"
  11. CodeCatalogUnavailable = "pia_catalog_unavailable"
  12. CodeCatalogSignatureInvalid = "pia_catalog_signature_invalid"
  13. CodeCatalogSchemaUnsupported = "pia_catalog_schema_unsupported"
  14. CodeServerNotFound = "pia_server_not_found"
  15. CodeTLSValidation = "pia_tls_validation"
  16. CodeRegistrationRejected = "pia_registration_rejected"
  17. CodeRegistrationInvalid = "pia_registration_response_invalid"
  18. CodeTimeout = "pia_timeout"
  19. CodeCancelled = "pia_cancelled"
  20. CodeNetworkUnavailable = "pia_network_unavailable"
  21. )
  22. type Error struct {
  23. Code string
  24. Message string
  25. cause error
  26. }
  27. func NewError(code, message string) *Error {
  28. return &Error{Code: code, Message: message}
  29. }
  30. func WrapError(code, message string, cause error) *Error {
  31. return &Error{Code: code, Message: message, cause: cause}
  32. }
  33. func (e *Error) Error() string {
  34. if e == nil {
  35. return ""
  36. }
  37. return fmt.Sprintf("%s: %s", e.Code, e.Message)
  38. }
  39. func (e *Error) Unwrap() error {
  40. if e == nil {
  41. return nil
  42. }
  43. return e.cause
  44. }
  45. func CodeOf(err error) string {
  46. if err == nil {
  47. return ""
  48. }
  49. var pe *Error
  50. if errors.As(err, &pe) && pe != nil {
  51. return pe.Code
  52. }
  53. return CodeNetworkUnavailable
  54. }
  55. func MessageOf(err error) string {
  56. var pe *Error
  57. if errors.As(err, &pe) && pe != nil {
  58. return pe.Message
  59. }
  60. if err == nil {
  61. return ""
  62. }
  63. return "An unexpected error occurred."
  64. }