pub struct QuestionBuilder<Target> { /* private fields */ }
Expand description
Builds the question section of a DNS message.
A value of this type can be acquired by calling the question
method on
any other builder type. See the module documentation for an overview of
how to build a message.
You can push questions to the end of the question section via the
push
method. It accepts various things that represent a question:
question values and references; tuples of a domain name, record type, and
class; and, using the regular class of IN, a pair of just a domain name
and record type.
Once you are finished building the question section, you can progress to
the answer section via the answer
method or finish the message via
finish
. Additionally, conversions to all other builder types are
available as well.
Implementations§
source§impl<Target: Composer> QuestionBuilder<Target>
impl<Target: Composer> QuestionBuilder<Target>
sourcepub fn push(&mut self, question: impl ComposeQuestion) -> Result<(), PushError>
pub fn push(&mut self, question: impl ComposeQuestion) -> Result<(), PushError>
Appends a question to the question section.
This method accepts anything that implements the ComposeQuestion
trait. Apart from an actual Question
or a reference to it, this can also be a tuple of a domain name,
record type, and class or, if the class is the usual IN, a pair of
just the name and type.
In other words, the options are:
use domain::base::{Name, MessageBuilder, Question, Rtype};
use domain::base::iana::Class;
let mut msg = MessageBuilder::new_vec().question();
msg.push(Question::new_in(Name::root_ref(), Rtype::A)).unwrap();
msg.push(&Question::new_in(Name::root_ref(), Rtype::A)).unwrap();
msg.push((Name::root_ref(), Rtype::A, Class::IN)).unwrap();
msg.push((Name::root_ref(), Rtype::A)).unwrap();
source§impl<Target: Composer> QuestionBuilder<Target>
impl<Target: Composer> QuestionBuilder<Target>
§Conversions
Additional conversion are available via the Deref
implementation.
sourcepub fn rewind(&mut self)
pub fn rewind(&mut self)
Rewinds to an empty question section.
All previously added questions will be lost.
sourcepub fn builder(self) -> MessageBuilder<Target>
pub fn builder(self) -> MessageBuilder<Target>
Converts the question builder into a message builder.
All questions will be dropped and the question section will be empty.
source§impl<Target> QuestionBuilder<Target>
impl<Target> QuestionBuilder<Target>
sourcepub fn question(self) -> QuestionBuilder<Target>
pub fn question(self) -> QuestionBuilder<Target>
Converts the question builder into a question builder.
In other words, doesn’t do anything.
source§impl<Target: Composer> QuestionBuilder<Target>
impl<Target: Composer> QuestionBuilder<Target>
sourcepub fn answer(self) -> AnswerBuilder<Target>
pub fn answer(self) -> AnswerBuilder<Target>
Converts the question builder into an answer builder.
Converts the question builder into an authority builder.
This will leave the answer section empty.
sourcepub fn additional(self) -> AdditionalBuilder<Target>
pub fn additional(self) -> AdditionalBuilder<Target>
Converts the question builder into an additional builder.
This will leave the answer and authority sections empty.
source§impl<Target: FreezeBuilder> QuestionBuilder<Target>
impl<Target: FreezeBuilder> QuestionBuilder<Target>
sourcepub fn into_message(self) -> Message<Target::Octets>
pub fn into_message(self) -> Message<Target::Octets>
Converts the question builder into the final message.
The method will return a message atop whatever octets sequence the builder’s octets builder converts into.
source§impl<Target> QuestionBuilder<Target>
impl<Target> QuestionBuilder<Target>
sourcepub fn as_builder(&self) -> &MessageBuilder<Target>
pub fn as_builder(&self) -> &MessageBuilder<Target>
Returns a reference to the underlying message builder.
sourcepub fn as_builder_mut(&mut self) -> &mut MessageBuilder<Target>
pub fn as_builder_mut(&mut self) -> &mut MessageBuilder<Target>
Returns a mutable reference to the underlying message builder.
Methods from Deref<Target = MessageBuilder<Target>>§
sourcepub fn set_push_limit(&mut self, limit: usize)
pub fn set_push_limit(&mut self, limit: usize)
Limit how much of the underlying buffer may be used.
When a limit is set, calling push()
on a message section (e.g.
AdditionalBuilder::push()
) will fail if the limit is exceeded just
as if the actual end of the underlying buffer had been reached.
Note: Calling this function does NOT truncate the underlying buffer.
If the new limit is lees than the amount of the buffer that has
already been used, exisitng content beyond the limit will remain
untouched, the length will remain larger than the limit, and calls to
push()
will fail until the buffer is truncated to a size less than
the limit.
sourcepub fn clear_push_limit(&mut self)
pub fn clear_push_limit(&mut self)
Clear the push limit, if set.
Removes any push limit previously set via [set_push_limit()
].
sourcepub fn push_limit(&self) -> Option<usize>
pub fn push_limit(&self) -> Option<usize>
Returns the current push limit, if set.
sourcepub fn counts(&self) -> HeaderCounts
pub fn counts(&self) -> HeaderCounts
Return the current value of the message header counts.
sourcepub fn header_mut(&mut self) -> &mut Header
pub fn header_mut(&mut self) -> &mut Header
Returns a mutable reference to the message header for manipulations.
Trait Implementations§
source§impl<Target> AsMut<MessageBuilder<Target>> for QuestionBuilder<Target>
impl<Target> AsMut<MessageBuilder<Target>> for QuestionBuilder<Target>
source§fn as_mut(&mut self) -> &mut MessageBuilder<Target>
fn as_mut(&mut self) -> &mut MessageBuilder<Target>
source§impl<Target> AsRef<MessageBuilder<Target>> for QuestionBuilder<Target>
impl<Target> AsRef<MessageBuilder<Target>> for QuestionBuilder<Target>
source§fn as_ref(&self) -> &MessageBuilder<Target>
fn as_ref(&self) -> &MessageBuilder<Target>
source§impl<Target> AsRef<Target> for QuestionBuilder<Target>
impl<Target> AsRef<Target> for QuestionBuilder<Target>
source§impl<Target: Clone> Clone for QuestionBuilder<Target>
impl<Target: Clone> Clone for QuestionBuilder<Target>
source§fn clone(&self) -> QuestionBuilder<Target>
fn clone(&self) -> QuestionBuilder<Target>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<Target: Debug> Debug for QuestionBuilder<Target>
impl<Target: Debug> Debug for QuestionBuilder<Target>
source§impl<Target> Deref for QuestionBuilder<Target>
impl<Target> Deref for QuestionBuilder<Target>
source§impl<Target> DerefMut for QuestionBuilder<Target>
impl<Target> DerefMut for QuestionBuilder<Target>
source§impl<Target> From<AdditionalBuilder<Target>> for QuestionBuilder<Target>where
Target: Composer,
impl<Target> From<AdditionalBuilder<Target>> for QuestionBuilder<Target>where
Target: Composer,
source§fn from(src: AdditionalBuilder<Target>) -> Self
fn from(src: AdditionalBuilder<Target>) -> Self
source§impl<Target> From<AnswerBuilder<Target>> for QuestionBuilder<Target>where
Target: Composer,
impl<Target> From<AnswerBuilder<Target>> for QuestionBuilder<Target>where
Target: Composer,
source§fn from(src: AnswerBuilder<Target>) -> Self
fn from(src: AnswerBuilder<Target>) -> Self
source§impl<Target> From<AuthorityBuilder<Target>> for QuestionBuilder<Target>where
Target: Composer,
impl<Target> From<AuthorityBuilder<Target>> for QuestionBuilder<Target>where
Target: Composer,
source§fn from(src: AuthorityBuilder<Target>) -> Self
fn from(src: AuthorityBuilder<Target>) -> Self
source§impl<Target> From<MessageBuilder<Target>> for QuestionBuilder<Target>where
Target: Composer,
impl<Target> From<MessageBuilder<Target>> for QuestionBuilder<Target>where
Target: Composer,
source§fn from(src: MessageBuilder<Target>) -> Self
fn from(src: MessageBuilder<Target>) -> Self
source§impl<Target> From<QuestionBuilder<Target>> for AdditionalBuilder<Target>where
Target: Composer,
impl<Target> From<QuestionBuilder<Target>> for AdditionalBuilder<Target>where
Target: Composer,
source§fn from(src: QuestionBuilder<Target>) -> Self
fn from(src: QuestionBuilder<Target>) -> Self
source§impl<Target> From<QuestionBuilder<Target>> for AnswerBuilder<Target>where
Target: Composer,
impl<Target> From<QuestionBuilder<Target>> for AnswerBuilder<Target>where
Target: Composer,
source§fn from(src: QuestionBuilder<Target>) -> Self
fn from(src: QuestionBuilder<Target>) -> Self
source§impl<Target> From<QuestionBuilder<Target>> for AuthorityBuilder<Target>where
Target: Composer,
impl<Target> From<QuestionBuilder<Target>> for AuthorityBuilder<Target>where
Target: Composer,
source§fn from(src: QuestionBuilder<Target>) -> Self
fn from(src: QuestionBuilder<Target>) -> Self
source§impl<Target> From<QuestionBuilder<Target>> for Message<Target::Octets>where
Target: FreezeBuilder,
impl<Target> From<QuestionBuilder<Target>> for Message<Target::Octets>where
Target: FreezeBuilder,
source§fn from(src: QuestionBuilder<Target>) -> Self
fn from(src: QuestionBuilder<Target>) -> Self
source§impl<Target> From<QuestionBuilder<Target>> for MessageBuilder<Target>where
Target: Composer,
impl<Target> From<QuestionBuilder<Target>> for MessageBuilder<Target>where
Target: Composer,
source§fn from(src: QuestionBuilder<Target>) -> Self
fn from(src: QuestionBuilder<Target>) -> Self
Auto Trait Implementations§
impl<Target> Freeze for QuestionBuilder<Target>where
Target: Freeze,
impl<Target> RefUnwindSafe for QuestionBuilder<Target>where
Target: RefUnwindSafe,
impl<Target> Send for QuestionBuilder<Target>where
Target: Send,
impl<Target> Sync for QuestionBuilder<Target>where
Target: Sync,
impl<Target> Unpin for QuestionBuilder<Target>where
Target: Unpin,
impl<Target> UnwindSafe for QuestionBuilder<Target>where
Target: UnwindSafe,
Blanket Implementations§
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)