Skip to main content

Error

Enum Error 

Source
#[non_exhaustive]
pub enum Error {
Show 15 variants InvalidProxyServer { input: String, reason: String, }, InvalidBypassPattern { input: String, reason: String, }, InvalidProxyUrl { input: String, source: ParseError, }, UnsupportedProxyScheme(String), CgiHttpProxy { variable: String, }, Io { context: String, source: Error, }, Sandboxed { sandbox: String, reason: String, }, Unsupported, PacNotSupported { mode: &'static str, }, ProxyEntryUnusable { scheme: Scheme, rejected: RejectedValue, }, PacFetchRequired { url: Url, }, PacEvaluation { reason: String, }, PacTimeout { timeout: Duration, }, PacInvalidResult { result: String, }, PacEngineUnavailable,
}
Expand description

Errors from reading OS proxy configuration, and from routing a URL through what was read.

#[non_exhaustive]. No #[from] io::Error — I/O is always wrapped with context. Hand-written Debug: PacFetchRequired’s url::Url would print credentials; other payloads are masked at construction or safe.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

InvalidProxyServer

A Windows ProxyServer style specification could not be parsed.

Fields

§input: String

Offending token, masked — and withheld outright when it may be a credential.

§reason: String

Why parsing failed.

§

InvalidBypassPattern

A single bypass / no_proxy / ProxyOverride entry could not be parsed.

Fields

§input: String

Offending entry, masked like InvalidProxyServer’s.

§reason: String

Why parsing failed.

§

InvalidProxyUrl

An AutoConfigURL-style setting read from the OS is malformed.

Not the environment: *_proxy values go through ProxyEndpoint::parse, which answers with InvalidProxyServer instead.

Fields

§input: String

Offending input, masked like InvalidProxyServer’s.

§source: ParseError

Underlying parse error.

§

UnsupportedProxyScheme(String)

The proxy URL carried a scheme this crate does not understand.

Recognised schemes are listed on ProxyScheme.

§

CgiHttpProxy

http_proxy under CGI: a non-empty REQUEST_METHOD ⇒ forged Proxy: header (httpoxy, CVE-2016-5385). Refused like Go’s httpproxy; not applied to https_proxy/no_proxy, whose names no request header can produce.

KDE’s ProxyType = 4 raises the same error on a wider rule, because there the file names the variable each slot reads: any name a request header could have set — RFC 3875 §4.1.18’s HTTP_ prefix — is refused whichever slot named it, including the one holding the bypass list. variable is that name as written.

Fields

§variable: String

Variable name as set in the environment.

§

Io

An I/O failure, annotated with the operation that caused it.

OS error codes are carried as std::io::Error, built by from_raw_os_error.

Fields

§context: String

Operation in progress when the failure occurred.

§source: Error

Underlying I/O error.

§

Sandboxed

Linux sandbox: desktop settings unreadable (Flatpak without dconf → keyfile defaults). Portal fallback when possible; else this error — not a false Direct.

Fields

§sandbox: String

Detected sandbox name.

§reason: String

Why no source could be read.

§

Unsupported

No store to read. Off Windows/macOS/Linux there is no backend at all; on Linux it is a reading and not a property of the build — neither desktop store answered, which both desktop features being off guarantees and which a build with one of them on also reaches whenever the schema and kioslaverc are both missing from the machine.

Not the answer inside a sandbox: that route is chosen before either store is consulted and reports Sandboxed, including when the feature that would carry the portal fallback is off.

§

PacNotSupported

resolve() needs PAC/WPAD evaluation (resolve_with_pac / pac feature). Deliberately an error, not silent Direct.

resolve_with_pac answers with it too, for WpadAutoDetect handed no script body: discovery is a non-goal, so the fix there is to supply the script rather than to change entry point. mode is "wpad" either way and does not tell the two apart.

Fields

§mode: &'static str

Auto-config mode in effect.

§

ProxyEntryUnusable

The system configured a proxy for this scheme, the value could not be used, and no other entry covers it.

Returning ProxyStep::Direct here would assert something the platform does not do: KDE expands a [$e] value from the session environment and proxies the request, and this crate deliberately does not expand it. Only a scheme with no catch-all reaches this — a live socksProxy covers the drop first, exactly as Chromium’s fallback_proxies does. Where this reports, Chromium goes direct instead: its ProxyList::AddProxyChain drops a malformed entry with “Silently discard malformed inputs”, leaving MapUrlSchemeToProxyList to answer nullptr.

Fields

§scheme: Scheme

Which requests lost an answer — read off the drop’s own attribution, not off the slot it was found under. In every mode this crate builds the two are the same value, because each backend files its record against the slot it dropped, so this is the slot, and the slot is what decides coverage rather than the request’s own scheme: a lost catch-all reports Scheme::All whatever was asked for, and a ws/wss request reports whichever of the chain it lost. A caller who hands ProxyMode::manual a record attributed to one scheme under the key of another gets the attribution back rather than the key. Nothing normalises the pair: the record is the caller’s, and the same value is what ProxyMode::rejected hands back.

§rejected: RejectedValue

First drop naming that scheme; masked at construction. The rest stay reachable through ProxyMode::rejected on the mode this error was resolved against, which is the caller’s own config.effective wherever the caller supplied it. Where a resolver builds a mode of its own it is not: WinHttpPacResolver::resolve_config answers a WPAD miss by re-reading the registry into a Manual and resolving against that, and the mode goes out of scope with the call while the caller still holds WpadAutoDetect, which has no list. This field is what survives that.

§

PacFetchRequired

resolve_with_pac + ProxyMode::Pac without script body. Fetch is caller’s job; url stored verbatim, masked only in {}/{:?}.

Fields

§url: Url

Script URL.

§

PacEvaluation

PAC run failed (syntax, throw, limits). reason masked/sanitized at construction.

Fields

§reason: String

Engine message (sanitized).

§

PacTimeout

Evaluating a PAC script overran PacPolicy::timeout.

Fields

§timeout: Duration

Budget that was exceeded.

§

PacInvalidResult

FindProxyForURL returned nothing usable (malformed candidates skipped first). result masked at construction.

Fields

§result: String

Raw return string (masked).

§

PacEngineUnavailable

pac on but no engine (pac-boa or a custom pac::PacEvaluator).

Not linked: the item exists only with the pac feature on, and this variant does not.

Trait Implementations§

Source§

impl Debug for Error

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Error

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for Error

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl !UnwindSafe for Error

§

impl Freeze for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl UnsafeUnpin for Error

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more