Skip to main content

Error

Enum Error 

Source
#[non_exhaustive]
pub enum Error {
Show 16 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, }, PacSaturated { timeout: Duration, limit: usize, }, 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. A target with no backend has none at all; on Linux neither desktop store answered, which both desktop features being off guarantees and which a build with one of them on reaches when the schema and kioslaverc are missing.

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). An error, not silent Direct.

resolve_with_pac answers with it too, for WpadAutoDetect handed no script body: this crate runs no discovery itself, so the fix there is to supply the script, or to hand discovery to the OS through WinHttpPacResolver / CfNetworkPacResolver built with_wpad(true), which answer WpadAutoDetect with this error until they are. mode is "wpad" in every case and does not tell them 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 does not expand it. Only a scheme with no catch-all reaches this; a live socksProxy covers the drop first, 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. In every mode this crate builds, the attribution and the slot are the same value because each backend files its record against the slot it dropped, so the slot 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: nothing normalises a caller-built mismatch, 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. This field survives when a resolver builds a mode of its own that goes out of scope with the call: WinHttpPacResolver answers a WPAD miss by re-reading the registry into a Manual, while the caller still holds WpadAutoDetect, which has no list.

§

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.

§

PacSaturated

Every PAC evaluation slot stayed taken for the whole of PacPolicy::timeout, so the script never started. The PAC engines together run at most limit evaluation threads per process, and a thread holds its slot until its script ends, past the timeout that abandoned it. pac-quickjs interrupts a script at the deadline, and holds a slot past it only while a host function such as dnsResolve has yet to return.

Fields

§timeout: Duration

Budget spent waiting.

§limit: usize

Evaluation threads this process allows at once.

§

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-quickjs or a custom pac::PacEvaluator).

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<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> 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, 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<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