1use crate::{dialog::DialogId, transaction::key::TransactionKey, transport::SipAddr};
2use thiserror::Error as ThisError;
3
4#[derive(Debug, ThisError)]
5pub enum Error {
6 #[error("SIP message error: {0}")]
7 SipMessageError(#[from] rsip::Error),
8
9 #[error("DNS resolution error: {0}")]
10 DnsResolutionError(String),
11
12 #[error("Transport layer error: {0}: {1}")]
13 TransportLayerError(String, SipAddr),
14
15 #[error("Transaction error: {0}: {1}")]
16 TransactionError(String, TransactionKey),
17
18 #[error("Endpoint error: {0}")]
19 EndpointError(String),
20
21 #[error("Dialog error:{2}({0})")]
22 DialogError(String, DialogId, rsip::StatusCode),
23
24 #[error("I/O error: {0}")]
25 IoError(#[from] std::io::Error),
26
27 #[error("Address parse error: {0}")]
28 AddrParseError(#[from] std::net::AddrParseError),
29
30 #[error("Error: {0}")]
31 Error(String),
32}
33
34impl<T> From<tokio::sync::mpsc::error::SendError<T>> for Error {
35 fn from(e: tokio::sync::mpsc::error::SendError<T>) -> Self {
36 Error::Error(e.to_string())
37 }
38}