1 use failure::{Backtrace, Fail}; 2 use std::fmt; 3 4 use std::io::Error; 5 6 use networkio::bytes_errors::BytesReadError; 7 use networkio::bytes_errors::BytesWriteError; 8 9 #[derive(Debug, Fail)] 10 pub enum MpegTsErrorValue { 11 #[fail(display = "bytes read error\n")] 12 BytesReadError(BytesReadError), 13 14 #[fail(display = "bytes write error\n")] 15 BytesWriteError(BytesWriteError), 16 17 #[fail(display = "io error\n")] 18 IOError(Error), 19 20 #[fail(display = "program number exists\n")] 21 ProgramNumberExists, 22 23 #[fail(display = "pmt count execeed\n")] 24 PmtCountExeceed, 25 26 #[fail(display = "stream count execeed\n")] 27 StreamCountExeceed, 28 29 #[fail(display = "stream not found\n")] 30 StreamNotFound, 31 } 32 #[derive(Debug)] 33 pub struct MpegTsError { 34 pub value: MpegTsErrorValue, 35 } 36 37 impl From<BytesReadError> for MpegTsError { 38 fn from(error: BytesReadError) -> Self { 39 MpegTsError { 40 value: MpegTsErrorValue::BytesReadError(error), 41 } 42 } 43 } 44 45 impl From<BytesWriteError> for MpegTsError { 46 fn from(error: BytesWriteError) -> Self { 47 MpegTsError { 48 value: MpegTsErrorValue::BytesWriteError(error), 49 } 50 } 51 } 52 53 impl From<Error> for MpegTsError { 54 fn from(error: Error) -> Self { 55 MpegTsError { 56 value: MpegTsErrorValue::IOError(error), 57 } 58 } 59 } 60