use std::fmt;
#[derive(Debug)]
pub enum ProxyError {
CertLoadFailed(String),
NoCertificateAuthority,
NoCertsProvided,
BuildFailed(String),
TorBootstrapFailed(String),
TorFeatureDisabled,
VpnConfigMissing,
VpnFeatureDisabled,
NoUnderlyingProxy,
StartupFailed(String),
Generic(String),
}
impl fmt::Display for ProxyError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::CertLoadFailed(msg) => write!(f, "certificate load failed: {msg}"),
Self::NoCertificateAuthority => {
f.write_str("no certificate authority configuration provided")
}
Self::NoCertsProvided => f.write_str("no certificate authority certs provided"),
Self::BuildFailed(msg) => write!(f, "proxy build failed: {msg}"),
Self::TorBootstrapFailed(msg) => write!(f, "Tor bootstrap failed: {msg}"),
Self::TorFeatureDisabled => {
f.write_str("Tor tunnel requested but 'tor' feature is not enabled")
}
Self::VpnConfigMissing => f.write_str("VPN tunnel enabled but no VPN config provided"),
Self::VpnFeatureDisabled => {
f.write_str("VPN tunnel requested but 'vpn' feature is not enabled")
}
Self::NoUnderlyingProxy => f.write_str("unable to locate underlying proxy"),
Self::StartupFailed(msg) => write!(f, "proxy startup failed: {msg}"),
Self::Generic(msg) => f.write_str(msg),
}
}
}
impl std::error::Error for ProxyError {}
impl From<ProxyError> for product_os_utilities::ProductOSError {
fn from(e: ProxyError) -> Self {
product_os_utilities::ProductOSError::GenericError(e.to_string())
}
}