pub struct RelayExclusion<'a> { /* private fields */ }
Expand description
A set of relays that we must not use when picking a given relays.
Exclusions are generally used to make sure that we obey family-based path-selection rules, that we avoid putting the same relay into a set more than once, or similar purposes.
(This is a separate type from RelayRestriction
so that we can
enforce our rule that every RelaySelector
must
have a RelayExclusion
.)
Implementations§
Source§impl<'a> RelayExclusion<'a>
impl<'a> RelayExclusion<'a>
Sourcepub fn no_relays_excluded() -> Self
pub fn no_relays_excluded() -> Self
Exclude no relays at all.
This kind of restriction is useful when picking the first relay for something,
Sourcepub fn exclude_identities(ids: RelayIdSet) -> Self
pub fn exclude_identities(ids: RelayIdSet) -> Self
Exclude every relay that has an identity in ids
.
Sourcepub fn exclude_specific_relays(relays: &[Relay<'a>]) -> Self
pub fn exclude_specific_relays(relays: &[Relay<'a>]) -> Self
Exclude every relay that appears in relays
.
Sourcepub fn exclude_channel_target_family<CT: ChanTarget>(
cfg: &RelaySelectionConfig<'_>,
ct: &CT,
netdir: &'a NetDir,
) -> Self
pub fn exclude_channel_target_family<CT: ChanTarget>( cfg: &RelaySelectionConfig<'_>, ct: &CT, netdir: &'a NetDir, ) -> Self
Try to exclude every relay in the same family as the ChanTarget
ct
.
§Limitations
A ChanTarget does not have a listed family. Thus, if it does not correspond
to a relay listed in netdir
, we can only exclude relays that share the
same identity, or relays that are in the same subnet.
Whenever possible, it’s better to use exclude_relays_in_same_family.
Sourcepub fn exclude_relays_in_same_family(
cfg: &RelaySelectionConfig<'_>,
relays: Vec<Relay<'a>>,
family_rules: FamilyRules,
) -> Self
pub fn exclude_relays_in_same_family( cfg: &RelaySelectionConfig<'_>, relays: Vec<Relay<'a>>, family_rules: FamilyRules, ) -> Self
Exclude every relay that is in the same family as any member of
relays
.
(Remember that every relay is considered to be in the same family as
itself, so you don’t typically need to use exclude_specific_relays
along with this.)
Considers relays that are in the same subnets (according to cfg
) to
belong to the same family.
Sourcepub fn extend(&mut self, other: &RelayExclusion<'a>)
pub fn extend(&mut self, other: &RelayExclusion<'a>)
Modify this RelayExclusion
by adding every exclusion from other
.
(Any subnet configuration becomes the union of previous subnet configurations.)
Trait Implementations§
Source§impl<'a> Clone for RelayExclusion<'a>
impl<'a> Clone for RelayExclusion<'a>
Source§fn clone(&self) -> RelayExclusion<'a>
fn clone(&self) -> RelayExclusion<'a>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<'a> Debug for RelayExclusion<'a>
impl<'a> Debug for RelayExclusion<'a>
Source§impl<'a> From<RelayExclusion<'a>> for RelayRestriction<'a>
impl<'a> From<RelayExclusion<'a>> for RelayRestriction<'a>
Source§fn from(value: RelayExclusion<'a>) -> Self
fn from(value: RelayExclusion<'a>) -> Self
Source§impl<'a> LowLevelRelayPredicate for RelayExclusion<'a>
impl<'a> LowLevelRelayPredicate for RelayExclusion<'a>
Source§fn low_level_predicate_permits_relay(&self, relay: &Relay<'_>) -> bool
fn low_level_predicate_permits_relay(&self, relay: &Relay<'_>) -> bool
relay
provides this predicate.Auto Trait Implementations§
impl<'a> Freeze for RelayExclusion<'a>
impl<'a> RefUnwindSafe for RelayExclusion<'a>
impl<'a> Send for RelayExclusion<'a>
impl<'a> Sync for RelayExclusion<'a>
impl<'a> Unpin for RelayExclusion<'a>
impl<'a> UnwindSafe for RelayExclusion<'a>
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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