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