1*ffe74184SMartin Algesten use thiserror::Error;
2*ffe74184SMartin Algesten
3*ffe74184SMartin Algesten pub type Result<T> = std::result::Result<T, Error>;
4*ffe74184SMartin Algesten
5*ffe74184SMartin Algesten #[derive(Error, Debug, PartialEq)]
6*ffe74184SMartin Algesten #[non_exhaustive]
7*ffe74184SMartin Algesten pub enum Error {
8*ffe74184SMartin Algesten #[error("Invalid Parent RTCP Reader")]
9*ffe74184SMartin Algesten ErrInvalidParentRtcpReader,
10*ffe74184SMartin Algesten #[error("Invalid Parent RTP Reader")]
11*ffe74184SMartin Algesten ErrInvalidParentRtpReader,
12*ffe74184SMartin Algesten #[error("Invalid Next RTP Writer")]
13*ffe74184SMartin Algesten ErrInvalidNextRtpWriter,
14*ffe74184SMartin Algesten #[error("Invalid CloseRx Channel")]
15*ffe74184SMartin Algesten ErrInvalidCloseRx,
16*ffe74184SMartin Algesten #[error("Invalid PacketRx Channel")]
17*ffe74184SMartin Algesten ErrInvalidPacketRx,
18*ffe74184SMartin Algesten #[error("IO EOF")]
19*ffe74184SMartin Algesten ErrIoEOF,
20*ffe74184SMartin Algesten #[error("Buffer is too short")]
21*ffe74184SMartin Algesten ErrShortBuffer,
22*ffe74184SMartin Algesten #[error("Invalid buffer size")]
23*ffe74184SMartin Algesten ErrInvalidSize,
24*ffe74184SMartin Algesten
25*ffe74184SMartin Algesten #[error("{0}")]
26*ffe74184SMartin Algesten Srtp(#[from] srtp::Error),
27*ffe74184SMartin Algesten #[error("{0}")]
28*ffe74184SMartin Algesten Rtcp(#[from] rtcp::Error),
29*ffe74184SMartin Algesten #[error("{0}")]
30*ffe74184SMartin Algesten Rtp(#[from] rtp::Error),
31*ffe74184SMartin Algesten #[error("{0}")]
32*ffe74184SMartin Algesten Util(#[from] util::Error),
33*ffe74184SMartin Algesten
34*ffe74184SMartin Algesten #[error("{0}")]
35*ffe74184SMartin Algesten Other(String),
36*ffe74184SMartin Algesten }
37*ffe74184SMartin Algesten
38*ffe74184SMartin Algesten /// flatten_errs flattens multiple errors into one
flatten_errs(errs: Vec<Error>) -> Result<()>39*ffe74184SMartin Algesten pub fn flatten_errs(errs: Vec<Error>) -> Result<()> {
40*ffe74184SMartin Algesten if errs.is_empty() {
41*ffe74184SMartin Algesten Ok(())
42*ffe74184SMartin Algesten } else {
43*ffe74184SMartin Algesten let errs_strs: Vec<String> = errs.into_iter().map(|e| e.to_string()).collect();
44*ffe74184SMartin Algesten Err(Error::Other(errs_strs.join("\n")))
45*ffe74184SMartin Algesten }
46*ffe74184SMartin Algesten }
47