pub struct SvcParamsBuilder<Octs> { /* private fields */ }
Expand description

A builder for a service parameter sequence.

This type wraps an octets builder and allows appending parameter values. You can create a new empty builder using the empty function or copy an existing value through from_params.

You can add additional values using the push method. There are also dedicated methods for all known value types. The builder will make sure that each parameter key can only appear once. Thus, pushing values may fail if a value is already present.

The builder also takes care of sorting the values into their correct order. So you can push them in any order.

It only sorts the items when producing a frozen value via the freeze method.

Implementations§

source§

impl<Octs: OctetsBuilder + AsRef<[u8]> + AsMut<[u8]>> SvcParamsBuilder<Octs>

source

pub fn mandatory( &mut self, keys: impl AsRef<[SvcParamKey]> ) -> Result<(), PushValueError>

Adds a ‘mandatory’ value with the given keys.

Returns an error if there already is a ‘mandatory’ value, keys contains more values than fit into a service binding parameter value, or the underlying octets builder runs out of space.

source§

impl<Octs: OctetsBuilder + AsRef<[u8]> + AsMut<[u8]>> SvcParamsBuilder<Octs>

source

pub fn alpn(&mut self, protocols: &[&[u8]]) -> Result<(), PushAlpnError>

Adds an ALPN value to the parameters.

The ALPN protocol names to be included in the value must be provided as a slice of those names in order to be able to calculate the length of the value up front.

Returns an error if there already is an ALPN value, or if protocols contains more values than fit into a service binding parameter value, or the underlying octets builder runs out of space.

source§

impl<Octs: OctetsBuilder + AsRef<[u8]> + AsMut<[u8]>> SvcParamsBuilder<Octs>

source

pub fn no_default_alpn(&mut self) -> Result<(), PushError>

Adds the NoDefaultAlpn value.

source§

impl<Octs: OctetsBuilder + AsRef<[u8]> + AsMut<[u8]>> SvcParamsBuilder<Octs>

source

pub fn port(&mut self, port: u16) -> Result<(), PushError>

Adds a port value with the given port number.

source§

impl<Octs: OctetsBuilder + AsRef<[u8]> + AsMut<[u8]>> SvcParamsBuilder<Octs>

source

pub fn ech<Source: AsRef<[u8]> + ?Sized>( &mut self, ech: &Source ) -> Result<(), PushValueError>

Adds a port value with the given port number.

source§

impl<Octs: OctetsBuilder + AsRef<[u8]> + AsMut<[u8]>> SvcParamsBuilder<Octs>

source

pub fn ipv4hint( &mut self, addrs: impl AsRef<[Ipv4Addr]> ) -> Result<(), PushValueError>

Adds an ‘ipv4hint’ value with the given addresses.

Returns an error if there already is an ‘ipv4hint’ value, addrs contains more values than fit into a service binding parameter value, or the underlying octets builder runs out of space.

source§

impl<Octs: OctetsBuilder + AsRef<[u8]> + AsMut<[u8]>> SvcParamsBuilder<Octs>

source

pub fn ipv6hint( &mut self, addrs: impl AsRef<[Ipv6Addr]> ) -> Result<(), PushValueError>

Adds an ‘ipv6hint’ value with the given addresses.

Returns an error if there already is an ‘ipv6hint’ value, addrs contains more values than fit into a service binding parameter value, or the underlying octets builder runs out of space.

source§

impl<Octs: OctetsBuilder + AsRef<[u8]> + AsMut<[u8]>> SvcParamsBuilder<Octs>

source

pub fn dohpath(&mut self, template: &str) -> Result<(), PushValueError>

Adds a ‘dohpath’ value with the URI template.

Returns an error if there already is a ‘dohpath’ value, template is too long to fit in a service binding parameter value, or the underlying octets builder runs out of space.

source§

impl<Octs> SvcParamsBuilder<Octs>

source

pub fn empty() -> Selfwhere Octs: EmptyBuilder,

Creates an empty parameter builder.

source

pub fn from_params<Src: Octets + ?Sized>( params: &SvcParams<Src> ) -> Result<Self, ShortBuf>where Octs: AsRef<[u8]> + OctetsBuilder + EmptyBuilder,

Creates a parameter builder from an existing parameter sequence.

The function creates a new empty builder and copies over the content of params. It can fail if the octets builder is not capable of providing enough space to hold the content of params.

source

pub fn push<Value: ComposeSvcParamValue + ?Sized>( &mut self, value: &Value ) -> Result<(), PushError>where Octs: OctetsBuilder + AsRef<[u8]> + AsMut<[u8]>,

Adds a new value to the builder.

The method will return an error if a value with this key is already present or if there isn’t enough space left in the builder’s buffer.

source

pub fn freeze<Target>( &self ) -> Result<SvcParams<Target>, <<Target as FromBuilder>::Builder as OctetsBuilder>::AppendError>where Octs: AsRef<[u8]>, Target: FromBuilder, <Target as FromBuilder>::Builder: OctetsBuilder + EmptyBuilder,

Freezes the builder to a parameter sequence.

Because the values may need to be resorted, this method actually produces a new octets sequence. This is why it doesn’t consume the builder and may fail if the target octet’s builder can’t provide enough space.

Trait Implementations§

source§

impl<Octs: Clone> Clone for SvcParamsBuilder<Octs>

source§

fn clone(&self) -> SvcParamsBuilder<Octs>

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl<Octs: Debug> Debug for SvcParamsBuilder<Octs>

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<Octs> RefUnwindSafe for SvcParamsBuilder<Octs>where Octs: RefUnwindSafe,

§

impl<Octs> Send for SvcParamsBuilder<Octs>where Octs: Send,

§

impl<Octs> Sync for SvcParamsBuilder<Octs>where Octs: Sync,

§

impl<Octs> Unpin for SvcParamsBuilder<Octs>where Octs: Unpin,

§

impl<Octs> UnwindSafe for SvcParamsBuilder<Octs>where Octs: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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<Source, Target> OctetsInto<Target> for Sourcewhere Target: OctetsFrom<Source>,

§

type Error = <Target as OctetsFrom<Source>>::Error

source§

fn try_octets_into( self ) -> Result<Target, <Source as OctetsInto<Target>>::Error>

Performs the conversion.
source§

fn octets_into(self) -> Targetwhere Self::Error: Into<Infallible>,

Performs an infallible conversion.
source§

impl<T> ToOwned for Twhere T: Clone,

§

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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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<V, T> VZip<V> for Twhere V: MultiLane<T>,

source§

fn vzip(self) -> V