Skip to main content

EnvPrecedence

Enum EnvPrecedence 

Source
#[non_exhaustive]
pub enum EnvPrecedence { BeforeSystem, AfterSystem, }
Expand description

Where the process environment ranks against the OS settings in ProxyConfig::with_env.

A third ranking, “ignore the environment”, is not a variant: a caller who wants the environment ignored does not call with_env.

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.
§

BeforeSystem

The environment outranks every OS source. What a consumer layering a *_proxy reader over the system settings gets by default: Go’s golang.org/x/net/http/ httpproxy reads the variables and nothing else, so a caller who consults it first has already chosen this.

§

AfterSystem

The OS settings outrank the environment, which answers only when they produced no configuration at all. Not per scheme: one OS source is enough to settle every scheme, including the ones it says nothing about; ProxyConfig::with_env ranks sources, it does not fill slots. Chromium’s net/proxy_resolution/proxy_config_service_linux.cc does this in the strong form: once the desktop settings have produced a configuration it never looks at the variables, a desktop mode of “none” counts as one, and reading mode always finds a value, so a stock desktop with no proxy configured still counts.

This crate is a shade weaker on GNOME: it asks who wrote that mode, and only one that was set (in the user’s dconf layer, or an administrator’s profile) becomes a source. A machine whose proxy settings were never touched therefore reaches this rank with an empty sources, and the environment answers. An unset mode and a mode set to direct are different answers, and only the second should outrank a *_proxy an operator set.

On Windows that leaves this a rank the environment never takes: read always reports a Registry source, ProxyEnable = 0 included, so there is never a snapshot for the environment to answer for. macOS is nearly as closed: a scope the reader could interpret becomes a source whatever it says, Direct included, so the environment answers only where neither State: nor Setup: came back (a missing key, a NULL, or a value that is not a dictionary); scopes that name no proxy do not qualify. Linux is where this rank applies: desktop stores that exist and are unset produce a snapshot with no source at all. So does the degraded case beside it (the store this session’s desktop would normally use compiled out of the build while the other one is unset), where the empty sources means “never consulted” rather than “found nothing”, which only fallbacks records. A machine with no desktop store at all is not this case: read fails with Error::Unsupported, so there is no snapshot to fold an environment into.

Even a rank the environment never takes differs from the “ignore” this enum leaves out, which is a caller not folding at all: a rank settles only effective, and the rest of the fold happens either way, so the environment lands in sources and captured_at drops to the older of the two reads even where this one can never win.

Trait Implementations§

Source§

impl Clone for EnvPrecedence

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for EnvPrecedence

Source§

impl Debug for EnvPrecedence

Source§

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

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

impl Eq for EnvPrecedence

Source§

impl Hash for EnvPrecedence

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for EnvPrecedence

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl PartialEq for EnvPrecedence

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialOrd for EnvPrecedence

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StructuralPartialEq for EnvPrecedence

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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