err.rs
1 //! Declare error type for tor-netdir 2 3 use thiserror::Error; 4 use tor_error::HasKind; 5 6 /// An error returned by the network directory code 7 #[derive(Error, Clone, Debug)] 8 #[non_exhaustive] 9 pub enum Error { 10 /// We don't have enough directory info to build circuits 11 #[error("Not enough directory information to build circuits")] 12 NotEnoughInfo, 13 /// We don't have any directory information. 14 #[error("No directory information available")] 15 NoInfo, 16 /// We have directory information, but it is too expired to use. 17 #[error("Directory is expired, and we haven't got a new one yet")] 18 DirExpired, 19 /// We have directory information, but it is too expired to use. 20 #[error("Directory is published too far in the future: Your clock is probably wrong")] 21 DirNotYetValid, 22 /// We received a consensus document that should be impossible. 23 #[error("Invalid information from consensus document: {0}")] 24 InvalidConsensus(&'static str), 25 } 26 27 impl HasKind for Error { 28 fn kind(&self) -> tor_error::ErrorKind { 29 use tor_error::ErrorKind as EK; 30 use Error as E; 31 match self { 32 E::DirExpired => EK::DirectoryExpired, 33 E::DirNotYetValid => EK::ClockSkew, 34 E::NotEnoughInfo | E::NoInfo => EK::BootstrapRequired, 35 E::InvalidConsensus(_) => EK::TorProtocolViolation, 36 } 37 } 38 } 39 40 /// An error returned when looking up onion service directories. 41 #[derive(Error, Clone, Debug)] 42 #[cfg(feature = "hs-common")] 43 #[cfg_attr(docsrs, doc(cfg(feature = "hs-common")))] 44 #[non_exhaustive] 45 pub enum OnionDirLookupError { 46 /// We tried to look up an onion service directory for a time period that 47 /// did not correspond to one of our hash rings. 48 #[error("Tried to look up an onion service directory for an invalid time period.")] 49 WrongTimePeriod, 50 } 51 52 #[cfg(feature = "hs-common")] 53 impl HasKind for OnionDirLookupError { 54 fn kind(&self) -> tor_error::ErrorKind { 55 use tor_error::ErrorKind as EK; 56 use OnionDirLookupError as E; 57 match self { 58 E::WrongTimePeriod => EK::BadApiUsage, 59 } 60 } 61 }