[][src]Struct domain::base::message_builder::AdditionalBuilder

pub struct AdditionalBuilder<Target> { /* fields omitted */ }

Builds the additional section of a DNS message.

A value of this type can be acquired by calling the additional method on any other builder type. See the module documentation for an overview of how to build a message.

You can push records to the end of the additional section via the push method. It accepts various things that represent resource records: record values and references, tuples of an owner domain name, a class, TTL, and record data, as well as tuples of just the owner, TTL, and data, assuming the class of IN.

A special method exists to make adding an OPT record to the section easier. The opt method creates an OptBuilder and passes it to a closure. This way, you can add and remove OPT records from additional builders that are part of another type and cannot be traded in easily.

Once you are finished building the additional section, you can finish the message via finish. Additionally, conversions to all other builder types are available as well.

Implementations

impl<Target: OctetsBuilder> AdditionalBuilder<Target>[src]

pub fn push(&mut self, record: impl AsRecord) -> Result<(), ShortBuf>[src]

Appends a record to the additional section.

This methods accepts anything that implements the AsRecord trait. Apart from record values and references, this are tuples of the owner domain name, optionally the class (which is taken to be IN if missing), the TTL, and record data.

In other words, you can do the following things:

use domain::base::{Dname, MessageBuilder, Record, Rtype};
use domain::base::iana::Class;
use domain::rdata::A;

let mut msg = MessageBuilder::new_vec().additional();
let record = Record::new(
    Dname::root_ref(), Class::In, 86400, A::from_octets(192, 0, 2, 1)
);
msg.push(&record).unwrap();
msg.push(record).unwrap();
msg.push(
    (Dname::root_ref(), Class::In, 86400, A::from_octets(192, 0, 2, 1))
).unwrap();
msg.push(
    (Dname::root_ref(), 86400, A::from_octets(192, 0, 2, 1))
).unwrap();

pub fn opt<F, R>(&mut self, build: F) -> Result<R, ShortBuf> where
    F: FnOnce(&mut OptBuilder<Target>) -> Result<R, ShortBuf>, 
[src]

Appends and builds an OPT record.

The actual building of the record is handled by a closure that receives an OptBuilder which can both change the header of the record and add options.

The method will return whatever the closure returns. In addition, it will return an error if it failed to add the header of the OPT record.

impl<Target: OctetsBuilder> AdditionalBuilder<Target>[src]

Conversions

Additional conversion methods are available via the Deref implementation.

pub fn rewind(&mut self)[src]

Rewinds to an empty additional section.

All previously added additional records will be lost.

pub fn builder(self) -> MessageBuilder<Target>[src]

Converts the additional builder into a message builder.

All questions and records will be dropped and all sections will be empty.

pub fn question(self) -> QuestionBuilder<Target>[src]

Converts the additional builder into a question builder.

All answer, authority, and additional records will be dropped. All previously added questions will, however, remain.

pub fn answer(self) -> AnswerBuilder<Target>[src]

Converts the additional builder into an answer builder.

All authority and additional records will be dropped. All questions and answer records will remain.

pub fn authority(self) -> AuthorityBuilder<Target>[src]

Converts the additional builder into an authority builder.

All additional records will be dropped. All questions, answer, and authority records will remain.

pub fn additional(self) -> AdditionalBuilder<Target>[src]

Converts the additional builder into an additional builder.

In other words, does absolutely nothing.

pub fn finish(self) -> Target[src]

Converts the additional builder into the underlying octets builder.

pub fn into_message(self) -> Message<Target::Octets> where
    Target: IntoOctets
[src]

Converts the additional builder into the final message.

The method will return a message atop whatever octets sequence the builder’s octets builder converts into.

impl<Target> AdditionalBuilder<Target>[src]

pub fn as_builder(&self) -> &MessageBuilder<Target>[src]

Returns a reference to the underlying message builder.

pub fn as_builder_mut(&mut self) -> &mut MessageBuilder<Target>[src]

Returns a mutable reference to the underlying message builder.

Methods from Deref<Target = MessageBuilder<Target>>

pub fn header(&self) -> Header[src]

Return the current value of the message header.

pub fn header_mut(&mut self) -> &mut Header[src]

Returns a mutable reference to the message header for manipulations.

pub fn counts(&self) -> HeaderCounts[src]

Return the current value of the message header counts.

pub fn as_target(&self) -> &Target[src]

Returns a reference to the underlying octets builder.

pub fn as_slice(&self) -> &[u8] where
    Target: AsRef<[u8]>, 
[src]

Returns an octets slice of the octets assembled so far.

pub fn as_message(&self) -> Message<&[u8]> where
    Target: AsRef<[u8]>, 
[src]

Returns a message atop for the octets assembled so far.

This message is atop the octets slices derived from the builder, so it can be created cheaply.

Trait Implementations

impl<Target> AsMut<MessageBuilder<Target>> for AdditionalBuilder<Target>[src]

impl<Target: AsRef<[u8]>> AsRef<[u8]> for AdditionalBuilder<Target>[src]

impl<Target> AsRef<MessageBuilder<Target>> for AdditionalBuilder<Target>[src]

impl<Target> AsRef<Target> for AdditionalBuilder<Target>[src]

impl<Target: Clone> Clone for AdditionalBuilder<Target>[src]

impl<Target: Debug> Debug for AdditionalBuilder<Target>[src]

impl<Target> Deref for AdditionalBuilder<Target>[src]

type Target = MessageBuilder<Target>

The resulting type after dereferencing.

impl<Target> DerefMut for AdditionalBuilder<Target>[src]

impl<Target> From<AdditionalBuilder<Target>> for MessageBuilder<Target> where
    Target: OctetsBuilder
[src]

impl<Target> From<AdditionalBuilder<Target>> for QuestionBuilder<Target> where
    Target: OctetsBuilder
[src]

impl<Target> From<AdditionalBuilder<Target>> for AnswerBuilder<Target> where
    Target: OctetsBuilder
[src]

impl<Target> From<AdditionalBuilder<Target>> for AuthorityBuilder<Target> where
    Target: OctetsBuilder
[src]

impl<Target> From<AnswerBuilder<Target>> for AdditionalBuilder<Target> where
    Target: OctetsBuilder
[src]

impl<Target> From<AuthorityBuilder<Target>> for AdditionalBuilder<Target> where
    Target: OctetsBuilder
[src]

impl<Target> From<MessageBuilder<Target>> for AdditionalBuilder<Target> where
    Target: OctetsBuilder
[src]

impl<Target> From<QuestionBuilder<Target>> for AdditionalBuilder<Target> where
    Target: OctetsBuilder
[src]

impl<Target> RecordSectionBuilder for AdditionalBuilder<Target> where
    Target: OctetsBuilder
[src]

Auto Trait Implementations

impl<Target> RefUnwindSafe for AdditionalBuilder<Target> where
    Target: RefUnwindSafe

impl<Target> Send for AdditionalBuilder<Target> where
    Target: Send

impl<Target> Sync for AdditionalBuilder<Target> where
    Target: Sync

impl<Target> Unpin for AdditionalBuilder<Target> where
    Target: Unpin

impl<Target> UnwindSafe for AdditionalBuilder<Target> where
    Target: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

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