#[repr(transparent)]pub struct IpHint<T>(pub Vec<T>);
Expand description
6.4. "ipv4hint" and "ipv6hint"
The "ipv4hint" and "ipv6hint" keys convey IP addresses that clients
MAY use to reach the service. If A and AAAA records for TargetName
are locally available, the client SHOULD ignore these hints.
Otherwise, clients SHOULD perform A and/or AAAA queries for
TargetName as in Section 3, and clients SHOULD use the IP address in
those responses for future connections. Clients MAY opt to terminate
any connections using the addresses in hints and instead switch to
the addresses in response to the TargetName query. Failure to use A
and/or AAAA response addresses could negatively impact load balancing
or other geo-aware features and thereby degrade client performance.
The presentation "value" SHALL be a comma-separated list
(Appendix A.1) of one or more IP addresses of the appropriate family
in standard textual format [RFC5952]. To enable simpler parsing,
this SvcParamValue MUST NOT contain escape sequences.
The wire format for each parameter is a sequence of IP addresses in
network byte order. Like an A or AAAA RRSet, the list of addresses
represents an unordered collection, and clients SHOULD pick addresses
to use in a random order. An empty list of addresses is invalid.
When selecting between IPv4 and IPv6 addresses to use, clients may
use an approach such as Happy Eyeballs [HappyEyeballsV2]. When only
"ipv4hint" is present, IPv6-only clients may synthesize IPv6
addresses as specified in [RFC7050] or ignore the "ipv4hint" key and
wait for AAAA resolution (Section 3). Recursive resolvers MUST NOT
perform DNS64 ([RFC6147]) on parameters within a SVCB record. For
best performance, server operators SHOULD include an "ipv6hint"
parameter whenever they include an "ipv4hint" parameter.
These parameters are intended to minimize additional connection
latency when a recursive resolver is not compliant with the
requirements in Section 4, and SHOULD NOT be included if most clients
are using compliant recursive resolvers. When TargetName is the
origin hostname or the owner name (which can be written as "."),
server operators SHOULD NOT include these hints, because they are
unlikely to convey any performance benefit.
Tuple Fields
0: Vec<T>
Trait Implementations
sourceimpl<'r, T> BinDecodable<'r> for IpHint<T> where
T: BinDecodable<'r>,
impl<'r, T> BinDecodable<'r> for IpHint<T> where
T: BinDecodable<'r>,
sourcefn read(decoder: &mut BinDecoder<'r>) -> ProtoResult<Self>
fn read(decoder: &mut BinDecoder<'r>) -> ProtoResult<Self>
The wire format for each parameter is a sequence of IP addresses in network byte order. Like an A or AAAA RRSet, the list of addresses represents an unordered collection, and clients SHOULD pick addresses to use in a random order. An empty list of addresses is invalid.
sourcefn from_bytes(bytes: &'r [u8]) -> ProtoResult<Self>
fn from_bytes(bytes: &'r [u8]) -> ProtoResult<Self>
Returns the object in binary form
sourceimpl<T> BinEncodable for IpHint<T> where
T: BinEncodable,
impl<T> BinEncodable for IpHint<T> where
T: BinEncodable,
sourcefn emit(&self, encoder: &mut BinEncoder<'_>) -> ProtoResult<()>
fn emit(&self, encoder: &mut BinEncoder<'_>) -> ProtoResult<()>
The wire format for each parameter is a sequence of IP addresses in network byte order. Like an A or AAAA RRSet, the list of addresses represents an unordered collection, and clients SHOULD pick addresses to use in a random order. An empty list of addresses is invalid.
sourcefn to_bytes(&self) -> ProtoResult<Vec<u8>>
fn to_bytes(&self) -> ProtoResult<Vec<u8>>
Returns the object in binary form
sourceimpl<'de, T> Deserialize<'de> for IpHint<T> where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for IpHint<T> where
T: Deserialize<'de>,
sourcefn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl<T> Display for IpHint<T> where
T: Display,
impl<T> Display for IpHint<T> where
T: Display,
sourcefn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
The presentation “value” SHALL be a comma-separated list (Appendix A.1) of one or more IP addresses of the appropriate family in standard textual format RFC 5952. To enable simpler parsing, this SvcParamValue MUST NOT contain escape sequences.
impl<T: Eq> Eq for IpHint<T>
impl<T> StructuralEq for IpHint<T>
impl<T> StructuralPartialEq for IpHint<T>
Auto Trait Implementations
impl<T> RefUnwindSafe for IpHint<T> where
T: RefUnwindSafe,
impl<T> Send for IpHint<T> where
T: Send,
impl<T> Sync for IpHint<T> where
T: Sync,
impl<T> Unpin for IpHint<T> where
T: Unpin,
impl<T> UnwindSafe for IpHint<T> where
T: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcefn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to key
and return true
if they are equal.
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
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
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more