1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
use std::error::Error; use std::convert::From; use std::fmt; use ring::error; use hyper::header::RetryAfter; use tokio_timer::TimeoutError; use client::WebPushResponse; use native_tls; #[derive(PartialEq, Debug)] pub enum WebPushError { Unspecified, Unauthorized, BadRequest, ServerError(Option<RetryAfter>), NotImplemented, InvalidUri, TimeoutError, EndpointNotValid, EndpointNotFound, PayloadTooLarge, TlsError, } impl From<TimeoutError<WebPushResponse>> for WebPushError { fn from(_: TimeoutError<WebPushResponse>) -> WebPushError { WebPushError::TimeoutError } } impl From<error::Unspecified> for WebPushError { fn from(_: error::Unspecified) -> WebPushError { WebPushError::Unspecified } } impl From<native_tls::Error> for WebPushError { fn from(_: native_tls::Error) -> WebPushError { WebPushError::TlsError } } impl Error for WebPushError { fn description(&self) -> &str { match *self { WebPushError::Unspecified => "An unknown error happened encrypting the message", WebPushError::Unauthorized => "Please provide valid credentials to send the notification", WebPushError::BadRequest => "Request was badly formed", WebPushError::ServerError(_) => "Server was unable to process the request, please try again later", WebPushError::PayloadTooLarge => "Maximum allowed payload size is 3800 characters", WebPushError::InvalidUri => "The provided URI is invalid", WebPushError::NotImplemented => "The feature is not implemented yet", WebPushError::TimeoutError => "The request timed out", WebPushError::EndpointNotValid => "The URL specified is no longer valid and should no longer be used", WebPushError::EndpointNotFound => "The URL specified is invalid and should not be used again", WebPushError::TlsError => "Could not initialize a TLS connection" } } fn cause(&self) -> Option<&Error> { None } } impl fmt::Display for WebPushError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", self.description()) } }