code: func mapErrorReason(reason string) error {
  	var e error
  	switch reason {
  	case "PayloadEmpty":
  		e = ErrPayloadEmpty
  	case "PayloadTooLarge":
  		e = ErrPayloadTooLarge
  	case "BadTopic":
  		e = ErrBadTopic
  	case "TopicDisallowed":
  		e = ErrTopicDisallowed
  	case "BadMessageId":
  		e = ErrBadMessageID
  	case "BadExpirationDate":
  		e = ErrBadExpirationDate
  	case "BadPriority":
  		e = ErrBadPriority
  	case "MissingDeviceToken":
  		e = ErrMissingDeviceToken
  	case "BadDeviceToken":
  		e = ErrBadDeviceToken
  	case "DeviceTokenNotForTopic":
  		e = ErrDeviceTokenNotForTopic
  	case "Unregistered":
  		e = ErrUnregistered
  	case "DuplicateHeaders":
  		e = ErrDuplicateHeaders
  	case "BadCertificateEnvironment":
  		e = ErrBadCertificateEnvironment
  	case "BadCertificate":
  		e = ErrBadCertificate
  	case "Forbidden":
  		e = ErrForbidden
  	case "BadPath":
  		e = ErrBadPath
  	case "MethodNotAllowed":
  		e = ErrMethodNotAllowed
  	case "TooManyRequests":
  		e = ErrTooManyRequests
  	case "IdleTimeout":
  		e = ErrIdleTimeout
  	case "Shutdown":
  		e = ErrShutdown
  	case "InternalServerError":
  		e = ErrInternalServerError
  	case "ServiceUnavailable":
  		e = ErrServiceUnavailable
  	case "MissingTopic":
  		e = ErrMissingTopic
  	default:
  		e = errors.New(reason)
  	}
  	return e
  }
docs: // mapErrorReason converts Apple error responses into exported Err variables
  // for comparisons.