xref: /xiu/protocol/rtmp/src/netstream/errors.rs (revision ea7993e4)
1 use {
2     crate::{amf0::errors::Amf0WriteError, chunk::errors::PackError},
3     failure::{Backtrace, Fail},
4     std::fmt,
5 };
6 
7 #[derive(Debug)]
8 pub struct NetStreamError {
9     pub value: NetStreamErrorValue,
10 }
11 
12 #[derive(Debug, Fail)]
13 pub enum NetStreamErrorValue {
14     #[fail(display = "amf0 write error: {}\n", _0)]
15     Amf0WriteError(Amf0WriteError),
16     #[fail(display = "invalid max chunk size")]
17     InvalidMaxChunkSize { chunk_size: usize },
18     #[fail(display = "pack error\n")]
19     PackError(PackError),
20 }
21 
22 impl From<Amf0WriteError> for NetStreamError {
23     fn from(error: Amf0WriteError) -> Self {
24         NetStreamError {
25             value: NetStreamErrorValue::Amf0WriteError(error),
26         }
27     }
28 }
29 
30 impl From<PackError> for NetStreamError {
31     fn from(error: PackError) -> Self {
32         NetStreamError {
33             value: NetStreamErrorValue::PackError(error),
34         }
35     }
36 }
37 
38 impl fmt::Display for NetStreamError {
39     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
40         fmt::Display::fmt(&self.value, f)
41     }
42 }
43 
44 impl Fail for NetStreamError {
45     fn cause(&self) -> Option<&dyn Fail> {
46         self.value.cause()
47     }
48 
49     fn backtrace(&self) -> Option<&Backtrace> {
50         self.value.backtrace()
51     }
52 }
53