xref: /webrtc/sdp/src/error.rs (revision ffe74184)
1*ffe74184SMartin Algesten use thiserror::Error;
2*ffe74184SMartin Algesten 
3*ffe74184SMartin Algesten use std::io;
4*ffe74184SMartin Algesten use std::num::ParseIntError;
5*ffe74184SMartin Algesten use std::string::FromUtf8Error;
6*ffe74184SMartin Algesten use substring::Substring;
7*ffe74184SMartin Algesten 
8*ffe74184SMartin Algesten pub type Result<T> = std::result::Result<T, Error>;
9*ffe74184SMartin Algesten 
10*ffe74184SMartin Algesten #[derive(Debug, Error, PartialEq)]
11*ffe74184SMartin Algesten #[non_exhaustive]
12*ffe74184SMartin Algesten pub enum Error {
13*ffe74184SMartin Algesten     #[error("codec not found")]
14*ffe74184SMartin Algesten     CodecNotFound,
15*ffe74184SMartin Algesten     #[error("missing whitespace")]
16*ffe74184SMartin Algesten     MissingWhitespace,
17*ffe74184SMartin Algesten     #[error("missing colon")]
18*ffe74184SMartin Algesten     MissingColon,
19*ffe74184SMartin Algesten     #[error("payload type not found")]
20*ffe74184SMartin Algesten     PayloadTypeNotFound,
21*ffe74184SMartin Algesten     #[error("{0}")]
22*ffe74184SMartin Algesten     Io(#[source] IoError),
23*ffe74184SMartin Algesten     #[error("utf-8 error: {0}")]
24*ffe74184SMartin Algesten     Utf8(#[from] FromUtf8Error),
25*ffe74184SMartin Algesten     #[error("SdpInvalidSyntax: {0}")]
26*ffe74184SMartin Algesten     SdpInvalidSyntax(String),
27*ffe74184SMartin Algesten     #[error("SdpInvalidValue: {0}")]
28*ffe74184SMartin Algesten     SdpInvalidValue(String),
29*ffe74184SMartin Algesten     #[error("sdp: empty time_descriptions")]
30*ffe74184SMartin Algesten     SdpEmptyTimeDescription,
31*ffe74184SMartin Algesten     #[error("parse int: {0}")]
32*ffe74184SMartin Algesten     ParseInt(#[from] ParseIntError),
33*ffe74184SMartin Algesten     #[error("parse url: {0}")]
34*ffe74184SMartin Algesten     ParseUrl(#[from] url::ParseError),
35*ffe74184SMartin Algesten     #[error("parse extmap: {0}")]
36*ffe74184SMartin Algesten     ParseExtMap(String),
37*ffe74184SMartin Algesten     #[error("{} --> {} <-- {}", .s.substring(0,*.p), .s.substring(*.p, *.p+1), .s.substring(*.p+1, .s.len()))]
38*ffe74184SMartin Algesten     SyntaxError { s: String, p: usize },
39*ffe74184SMartin Algesten }
40*ffe74184SMartin Algesten 
41*ffe74184SMartin Algesten #[derive(Debug, Error)]
42*ffe74184SMartin Algesten #[error("io error: {0}")]
43*ffe74184SMartin Algesten pub struct IoError(#[from] pub io::Error);
44*ffe74184SMartin Algesten 
45*ffe74184SMartin Algesten // Workaround for wanting PartialEq for io::Error.
46*ffe74184SMartin Algesten impl PartialEq for IoError {
eq(&self, other: &Self) -> bool47*ffe74184SMartin Algesten     fn eq(&self, other: &Self) -> bool {
48*ffe74184SMartin Algesten         self.0.kind() == other.0.kind()
49*ffe74184SMartin Algesten     }
50*ffe74184SMartin Algesten }
51*ffe74184SMartin Algesten 
52*ffe74184SMartin Algesten impl From<io::Error> for Error {
from(e: io::Error) -> Self53*ffe74184SMartin Algesten     fn from(e: io::Error) -> Self {
54*ffe74184SMartin Algesten         Error::Io(IoError(e))
55*ffe74184SMartin Algesten     }
56*ffe74184SMartin Algesten }
57