1b1840569SHarlanC use { 2b1840569SHarlanC failure::Fail, 3b1840569SHarlanC std::{fmt, io::Error}, 4b1840569SHarlanC tokio::sync::broadcast::error::RecvError, 5b1840569SHarlanC }; 6fcc2ec9eSHarlanC 7fcc2ec9eSHarlanC #[derive(Debug)] 8b1840569SHarlanC pub struct ClientError { 9fcc2ec9eSHarlanC pub value: PushClientErrorValue, 10fcc2ec9eSHarlanC } 11fcc2ec9eSHarlanC 12b1840569SHarlanC impl fmt::Display for ClientError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result13fcc2ec9eSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 14fcc2ec9eSHarlanC fmt::Display::fmt(&self.value, f) 15fcc2ec9eSHarlanC } 16fcc2ec9eSHarlanC } 17fcc2ec9eSHarlanC 18fcc2ec9eSHarlanC #[derive(Debug, Fail)] 19fcc2ec9eSHarlanC pub enum PushClientErrorValue { 20*69de9bbdSHarlanC #[fail(display = "receive error")] 21fcc2ec9eSHarlanC ReceiveError(RecvError), 22fcc2ec9eSHarlanC 23*69de9bbdSHarlanC #[fail(display = "send error")] 24fcc2ec9eSHarlanC SendError, 25*69de9bbdSHarlanC #[fail(display = "io error")] 26fcc2ec9eSHarlanC IOError(Error), 27fcc2ec9eSHarlanC } 28fcc2ec9eSHarlanC 29b1840569SHarlanC impl From<Error> for ClientError { from(error: Error) -> Self30fcc2ec9eSHarlanC fn from(error: Error) -> Self { 31b1840569SHarlanC ClientError { 32fcc2ec9eSHarlanC value: PushClientErrorValue::IOError(error), 33fcc2ec9eSHarlanC } 34fcc2ec9eSHarlanC } 35fcc2ec9eSHarlanC } 36fcc2ec9eSHarlanC 37b1840569SHarlanC impl From<RecvError> for ClientError { from(error: RecvError) -> Self38fcc2ec9eSHarlanC fn from(error: RecvError) -> Self { 39b1840569SHarlanC ClientError { 40fcc2ec9eSHarlanC value: PushClientErrorValue::ReceiveError(error), 41fcc2ec9eSHarlanC } 42fcc2ec9eSHarlanC } 43fcc2ec9eSHarlanC } 44