Enum HostRef
#[non_exhaustive]pub enum HostRef<'a> {
Name(DomainRef<'a>),
Address(IpAddr),
Uninterpreted(UninterpretedHostRef<'a>),
}net only.Expand description
Borrowed view of a Host.
Either a DomainRef borrowing into the source
buffer or an IpAddr (which is Copy and so always carried by value).
Useful anywhere a borrowed host view makes sense — URI host components, header-parse temporaries, DNS lookups against a non-owning buffer.
§Equality, hashing, ordering
RFC 3986 §6.2.2 syntactic equivalence applies across variants. A
non-bracketed HostRef::Uninterpreted whose bytes pct-decode
(and IDN-normalize) to a typed Domain compares, hashes, and
orders equal to the corresponding HostRef::Name; same for a
pct-encoded reg-name that decodes to an IpAddr vs
HostRef::Address. Bracketed Uninterpreted (IPvFuture) keeps
its own equality class — there’s no typed counterpart to bridge to.
#[non_exhaustive] for the same reason as Host — bridging
Uninterpreted to typed variants is what callers usually want;
pattern-matching on the tag misses the bridged forms.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Name(DomainRef<'a>)
A DNS-style name.
Address(IpAddr)
A literal IPv4 or IPv6 address.
Uninterpreted(UninterpretedHostRef<'a>)
Borrowed view of an UninterpretedHost — reg-name bytes
preserved verbatim or a bracketed IP-literal.
Implementations§
§impl<'a> HostRef<'a>
impl<'a> HostRef<'a>
pub fn canonicalize(self) -> Host
pub fn canonicalize(self) -> Host
Return an owned RFC 3986 canonical presentation of this host.
pub fn to_str(self) -> Cow<'a, str>
pub fn to_str(self) -> Cow<'a, str>
Returns this host as a string. Domain names and non-bracketed
reg-names return Cow::Borrowed (no allocation); IP addresses
and bracketed IP-literals are formatted into a fresh String.
pub fn is_empty(self) -> bool
pub fn is_empty(self) -> bool
Returns true when this host has an empty textual representation.
Typed domain names and IP addresses are never empty. An uninterpreted host is empty only when it has no bytes and is not an IP-literal enclosed by brackets. This method does not format or allocate.
pub fn as_unicode(self) -> Cow<'a, str>
Available on crate feature idna only.
pub fn as_unicode(self) -> Cow<'a, str>
idna only.Returns the Unicode (display) form of this host. See
Host::as_unicode for the full contract.
pub fn is_loopback(self) -> bool
pub fn is_loopback(self) -> bool
Returns true if this host designates the local machine via
loopback — either a loopback IP address (127.0.0.0/8 or ::1,
per IpAddr::is_loopback) or the RFC 6761 §6.3 localhost
name (localhost itself or any *.localhost subdomain,
case-insensitively).
The Uninterpreted variant is bridged
through its pct-decoded form: bytes that decode to a loopback IP
or the localhost name also return true. Bracketed IPvFuture
literals have no typed counterpart and are never loopback.
IPv4-mapped IPv6 addresses are canonicalized before this check, so
::ffff:127.0.0.1 is recognized as loopback. This is not
browser-style normalization: alternate IPv4
spellings that parse as a Name (0177.0.0.1,
2130706433, …) report as non-loopback — see the Host type
docs (SSRF awareness).
pub fn into_owned(self) -> Host
pub fn into_owned(self) -> Host
Returns an owned Host containing a copy of the underlying bytes
(or, for the IP variants, a copy of the address value). Named
into_owned (matching crate::std::borrow::Cow::into_owned) so it doesn’t shadow
the std ToOwned trait method.
Trait Implementations§
impl<'a> Copy for HostRef<'a>
impl Eq for HostRef<'_>
§impl Ord for HostRef<'_>
impl Ord for HostRef<'_>
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Auto Trait Implementations§
impl<'a> Freeze for HostRef<'a>
impl<'a> RefUnwindSafe for HostRef<'a>
impl<'a> Send for HostRef<'a>
impl<'a> Sync for HostRef<'a>
impl<'a> Unpin for HostRef<'a>
impl<'a> UnsafeUnpin for HostRef<'a>
impl<'a> UnwindSafe for HostRef<'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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§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§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a rama_grpc::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more§impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
type Error = <U as RamaTryFrom<T, CrateMarker>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.