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