Enum SvcParamValue

pub enum SvcParamValue {
    Mandatory(Mandatory),
    Alpn(Alpn),
    NoDefaultAlpn,
    Port(u16),
    Ipv4Hint(IpHint<A>),
    EchConfigList(EchConfigList),
    Ipv6Hint(IpHint<AAAA>),
    Unknown(Unknown),
}
Expand description

Warning, it is currently up to users of this type to validate the data against that expected by the key

  *  a 2 octet field containing the length of the SvcParamValue as an
     integer between 0 and 65535 in network byte order (but constrained
     by the RDATA and DNS message sizes).
  *  an octet string of this length whose contents are in a format
     determined by the SvcParamKey.

Variants§

§

Mandatory(Mandatory)

In a ServiceMode RR, a SvcParamKey is considered “mandatory” if the RR will not function correctly for clients that ignore this SvcParamKey. Each SVCB protocol mapping SHOULD specify a set of keys that are “automatically mandatory”, i.e. mandatory if they are present in an RR. The SvcParamKey “mandatory” is used to indicate any mandatory keys for this RR, in addition to any automatically mandatory keys that are present.

see Mandatory

§

Alpn(Alpn)

RFC 9460 SVCB and HTTPS Resource Records, Nov 2023

   The "alpn" and "no-default-alpn" SvcParamKeys together indicate the
   set of Application Layer Protocol Negotiation (ALPN) protocol
   identifiers [Alpn] and associated transport protocols supported by
   this service endpoint (the "SVCB ALPN set").
§

NoDefaultAlpn

For “no-default-alpn”, the presentation and wire format values MUST be empty. See also Alpn

§

Port(u16)

RFC 9460 SVCB and HTTPS Resource Records, Nov 2023

   7.2.  "port"

  The "port" SvcParamKey defines the TCP or UDP port that should be
  used to reach this alternative endpoint.  If this key is not present,
  clients SHALL use the authority endpoint's port number.

  The presentation value of the SvcParamValue is a single decimal
  integer between 0 and 65535 in ASCII.  Any other value (e.g. an
  empty value) is a syntax error.  To enable simpler parsing, this
  SvcParam MUST NOT contain escape sequences.

  The wire format of the SvcParamValue is the corresponding 2 octet
  numeric value in network byte order.

  If a port-restricting firewall is in place between some client and
  the service endpoint, changing the port number might cause that
  client to lose access to the service, so operators should exercise
  caution when using this SvcParamKey to specify a non-default port.
§

Ipv4Hint(IpHint<A>)

RFC 9460 SVCB and HTTPS Resource Records, Nov 2023

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.

see IpHint

§

EchConfigList(EchConfigList)

draft-ietf-tls-svcb-ech-01 Bootstrapping TLS Encrypted ClientHello with DNS Service Bindings, Sep 2024

2.  "SvcParam for ECH configuration"

  The "ech" SvcParamKey is defined for conveying the ECH configuration
  of an alternative endpoint. It is applicable to all TLS-based protocols
  (including DTLS [RFC9147] and QUIC version 1 [RFC9001]) unless otherwise
  specified.
§

Ipv6Hint(IpHint<AAAA>)

See IpHint

§

Unknown(Unknown)

Unparsed network data. Refer to documents on the associated key value

This will be left as is when read off the wire, and encoded in bas64 for presentation.

Implementations§

§

impl SvcParamValue

pub fn is_mandatory(&self) -> bool

Returns true if this is a SvcParamValue::Mandatory, otherwise false

pub fn as_mandatory_mut(&mut self) -> Option<&mut Mandatory>

Optionally returns mutable references to the inner fields if this is a SvcParamValue::Mandatory, otherwise None

pub fn as_mandatory(&self) -> Option<&Mandatory>

Optionally returns references to the inner fields if this is a SvcParamValue::Mandatory, otherwise None

pub fn into_mandatory(self) -> Result<Mandatory, SvcParamValue>

Returns the inner fields if this is a SvcParamValue::Mandatory, otherwise returns back the enum in the Err case of the result

pub fn is_alpn(&self) -> bool

Returns true if this is a SvcParamValue::Alpn, otherwise false

pub fn as_alpn_mut(&mut self) -> Option<&mut Alpn>

Optionally returns mutable references to the inner fields if this is a SvcParamValue::Alpn, otherwise None

pub fn as_alpn(&self) -> Option<&Alpn>

Optionally returns references to the inner fields if this is a SvcParamValue::Alpn, otherwise None

pub fn into_alpn(self) -> Result<Alpn, SvcParamValue>

Returns the inner fields if this is a SvcParamValue::Alpn, otherwise returns back the enum in the Err case of the result

pub fn is_no_default_alpn(&self) -> bool

Returns true if this is a SvcParamValue::NoDefaultAlpn, otherwise false

pub fn is_port(&self) -> bool

Returns true if this is a SvcParamValue::Port, otherwise false

pub fn as_port_mut(&mut self) -> Option<&mut u16>

Optionally returns mutable references to the inner fields if this is a SvcParamValue::Port, otherwise None

pub fn as_port(&self) -> Option<&u16>

Optionally returns references to the inner fields if this is a SvcParamValue::Port, otherwise None

pub fn into_port(self) -> Result<u16, SvcParamValue>

Returns the inner fields if this is a SvcParamValue::Port, otherwise returns back the enum in the Err case of the result

pub fn is_ipv4_hint(&self) -> bool

Returns true if this is a SvcParamValue::Ipv4Hint, otherwise false

pub fn as_ipv4_hint_mut(&mut self) -> Option<&mut IpHint<A>>

Optionally returns mutable references to the inner fields if this is a SvcParamValue::Ipv4Hint, otherwise None

pub fn as_ipv4_hint(&self) -> Option<&IpHint<A>>

Optionally returns references to the inner fields if this is a SvcParamValue::Ipv4Hint, otherwise None

pub fn into_ipv4_hint(self) -> Result<IpHint<A>, SvcParamValue>

Returns the inner fields if this is a SvcParamValue::Ipv4Hint, otherwise returns back the enum in the Err case of the result

pub fn is_ech_config_list(&self) -> bool

Returns true if this is a SvcParamValue::EchConfigList, otherwise false

pub fn as_ech_config_list_mut(&mut self) -> Option<&mut EchConfigList>

Optionally returns mutable references to the inner fields if this is a SvcParamValue::EchConfigList, otherwise None

pub fn as_ech_config_list(&self) -> Option<&EchConfigList>

Optionally returns references to the inner fields if this is a SvcParamValue::EchConfigList, otherwise None

pub fn into_ech_config_list(self) -> Result<EchConfigList, SvcParamValue>

Returns the inner fields if this is a SvcParamValue::EchConfigList, otherwise returns back the enum in the Err case of the result

pub fn is_ipv6_hint(&self) -> bool

Returns true if this is a SvcParamValue::Ipv6Hint, otherwise false

pub fn as_ipv6_hint_mut(&mut self) -> Option<&mut IpHint<AAAA>>

Optionally returns mutable references to the inner fields if this is a SvcParamValue::Ipv6Hint, otherwise None

pub fn as_ipv6_hint(&self) -> Option<&IpHint<AAAA>>

Optionally returns references to the inner fields if this is a SvcParamValue::Ipv6Hint, otherwise None

pub fn into_ipv6_hint(self) -> Result<IpHint<AAAA>, SvcParamValue>

Returns the inner fields if this is a SvcParamValue::Ipv6Hint, otherwise returns back the enum in the Err case of the result

pub fn is_unknown(&self) -> bool

Returns true if this is a SvcParamValue::Unknown, otherwise false

pub fn as_unknown_mut(&mut self) -> Option<&mut Unknown>

Optionally returns mutable references to the inner fields if this is a SvcParamValue::Unknown, otherwise None

pub fn as_unknown(&self) -> Option<&Unknown>

Optionally returns references to the inner fields if this is a SvcParamValue::Unknown, otherwise None

pub fn into_unknown(self) -> Result<Unknown, SvcParamValue>

Returns the inner fields if this is a SvcParamValue::Unknown, otherwise returns back the enum in the Err case of the result

Trait Implementations§

§

impl BinEncodable for SvcParamValue

§

fn emit(&self, encoder: &mut BinEncoder<'_>) -> Result<(), ProtoError>

Write the type to the stream
§

fn to_bytes(&self) -> Result<Vec<u8>, ProtoError>

Returns the object in binary form
§

impl Clone for SvcParamValue

§

fn clone(&self) -> SvcParamValue

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
§

impl Debug for SvcParamValue

§

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

Formats the value using the given formatter. Read more
§

impl Display for SvcParamValue

§

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

Formats the value using the given formatter. Read more
§

impl Hash for SvcParamValue

§

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

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
§

impl PartialEq for SvcParamValue

§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

impl Eq for SvcParamValue

§

impl StructuralPartialEq for SvcParamValue

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
§

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
§

impl<T, U> RamaFrom<T> for U
where U: From<T>,

§

fn rama_from(value: T) -> U

§

impl<T, U, CrateMarker> RamaInto<U, CrateMarker> for T
where U: RamaFrom<T, CrateMarker>,

§

fn rama_into(self) -> U

§

impl<T, U> RamaTryFrom<T> for U
where 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 T
where 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>

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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
§

impl<T> ToSmolStr for T
where T: Display + ?Sized,

§

fn to_smolstr(&self) -> SmolStr

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
§

impl<T> ToStringFallible for T
where T: Display,

§

fn try_to_string(&self) -> Result<String, TryReserveError>

ToString::to_string, but without panic on OOM.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,