xref: /xiu/protocol/rtmp/src/netstream/errors.rs (revision c2f3fbfa)
135844cc6SHarlanC use crate::amf0::errors::Amf0WriteError;
2069ff577SHarlanC 
3*c2f3fbfaSHarlanC use failure::{Backtrace, Fail};
4*c2f3fbfaSHarlanC use std::fmt;
5*c2f3fbfaSHarlanC 
6*c2f3fbfaSHarlanC #[derive(Debug)]
7069ff577SHarlanC pub struct NetStreamError {
8069ff577SHarlanC     pub value: NetStreamErrorValue,
9069ff577SHarlanC }
10069ff577SHarlanC 
11*c2f3fbfaSHarlanC #[derive(Debug, Fail)]
12069ff577SHarlanC pub enum NetStreamErrorValue {
13*c2f3fbfaSHarlanC     #[fail(display = "amf0 write error: {}", _0)]
14069ff577SHarlanC     Amf0WriteError(Amf0WriteError),
15*c2f3fbfaSHarlanC     #[fail(display = "invalid max chunk size")]
16069ff577SHarlanC     InvalidMaxChunkSize { chunk_size: usize },
17069ff577SHarlanC }
18069ff577SHarlanC 
19069ff577SHarlanC impl From<Amf0WriteError> for NetStreamError {
20069ff577SHarlanC     fn from(error: Amf0WriteError) -> Self {
21069ff577SHarlanC         NetStreamError {
22069ff577SHarlanC             value: NetStreamErrorValue::Amf0WriteError(error),
23069ff577SHarlanC         }
24069ff577SHarlanC     }
25069ff577SHarlanC }
26*c2f3fbfaSHarlanC 
27*c2f3fbfaSHarlanC impl fmt::Display for NetStreamError {
28*c2f3fbfaSHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
29*c2f3fbfaSHarlanC         fmt::Display::fmt(&self.value, f)
30*c2f3fbfaSHarlanC     }
31*c2f3fbfaSHarlanC }
32*c2f3fbfaSHarlanC 
33*c2f3fbfaSHarlanC impl Fail for NetStreamError {
34*c2f3fbfaSHarlanC     fn cause(&self) -> Option<&dyn Fail> {
35*c2f3fbfaSHarlanC         self.value.cause()
36*c2f3fbfaSHarlanC     }
37*c2f3fbfaSHarlanC 
38*c2f3fbfaSHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
39*c2f3fbfaSHarlanC         self.value.backtrace()
40*c2f3fbfaSHarlanC     }
41*c2f3fbfaSHarlanC }
42