1use crate::client::AddressFamily;
4use thiserror::Error;
5
6#[derive(Debug, Error)]
8pub enum Ndt7Error {
9 #[error("locate failed: {0}")]
11 LocateFailed(#[from] reqwest::Error),
12 #[error("no targets available")]
14 NoTargets,
15 #[error("server at capacity; try again later")]
17 NoCapacity,
18 #[error("serialize/deserialize error: {0}")]
20 JsonError(#[from] serde_json::Error),
21 #[error("timeout occured")]
23 Timeout(#[from] tokio::time::error::Elapsed),
24 #[error("websocket error: {0}")]
26 WebSocket(Box<tokio_tungstenite::tungstenite::Error>),
27 #[error("bad service URL: {0}")]
29 ServiceUnsupported(String),
30 #[error("URL parse error: {0}")]
32 UrlParse(#[from] url::ParseError),
33 #[error("I/O error: {0}")]
35 IoError(#[from] std::io::Error),
36 #[error("protocol violation: {0}")]
38 ProtocolViolation(String),
39 #[error("no {0} address found")]
41 NoAddressFound(AddressFamily),
42}
43
44impl From<tokio_tungstenite::tungstenite::Error> for Ndt7Error {
46 fn from(e: tokio_tungstenite::tungstenite::Error) -> Self {
47 Ndt7Error::WebSocket(Box::new(e))
48 }
49}
50
51pub type Result<T> = std::result::Result<T, Ndt7Error>;