pub struct Txt<Octs: ?Sized>(/* private fields */);
Expand description
TXT record data.
TXT records hold descriptive text. While it may appear as a single text, it internally consists of a sequence of one or more character strings. The type holds this sequence in its encoded form, i.e., each character string is at most 255 octets long and preceded by an octet with its length.
The type provides means to iterate over these strings, either as
CharStr
s via iter_charstrs
or
as plain octets slices via iter
. There is a short cut for
the most common case of there being exactly one character string in
as_flat_slice
. Finally, the two methods
text
and try_text
allow combining the
content into one single octets sequence.
The TXT record type is defined in RFC 1035, section 3.3.14.
§Presentation format
TXT record data appears in zone files as the white-space delimited sequence of its constituent character strings. This means that if these strings are not quoted, each “word” results in a character string of its own. Thus, the quoted form of the character string’s presentation format is preferred.
§Display
The Display
implementation prints the sequence of character strings in
their quoted presentation format separated by a single space.
§Serde support
When the serde
feature is enabled, the type supports serialization and
deserialization. The format differs for human readable and compact
serialization formats.
For human-readable formats, the type serializes into a newtype Txt
wrapping a sequence of serialized CharStr
s. The deserializer supports
a non-canonical form as a single string instead of the sequence. In this
case the string is broken up into chunks of 255 octets if it is longer.
However, not all format implementations support alternative
deserialization based on the encountered type. In particular,
serde-json doesn’t, so it will only accept sequences.
For compact formats, the type serializes as a newtype Txt
that contains
a byte array of the wire format representation of the content.
Implementations§
source§impl<Octs: FromBuilder> Txt<Octs>
impl<Octs: FromBuilder> Txt<Octs>
sourcepub fn build_from_slice(text: &[u8]) -> Result<Self, TxtAppendError>
pub fn build_from_slice(text: &[u8]) -> Result<Self, TxtAppendError>
Creates a new Txt record from a single slice.
If the slice is longer than 255 octets, it will be broken up into multiple character strings where all but the last string will be 255 octets long.
If the slice is longer than 65,535 octets or longer than what fits into the octets type used, an error is returned.
source§impl<Octs> Txt<Octs>
impl<Octs> Txt<Octs>
sourcepub fn from_octets(octets: Octs) -> Result<Self, TxtError>
pub fn from_octets(octets: Octs) -> Result<Self, TxtError>
Creates new TXT record data from its encoded content.
The octets
sequence most contain correctly encoded TXT record
data. That is, it must contain a sequence of at least one character
string of at most 255 octets each preceded by a length octet. An
empty sequence is not allowed.
Returns an error if octets
does not contain correctly encoded TXT
record data.
source§impl Txt<[u8]>
impl Txt<[u8]>
sourcepub fn from_slice(slice: &[u8]) -> Result<&Self, TxtError>
pub fn from_slice(slice: &[u8]) -> Result<&Self, TxtError>
Creates new TXT record data on an octets slice.
The slice must contain correctly encoded TXT record data, that is a sequence of encoded character strings. See
source§impl<Octs> Txt<Octs>
impl<Octs> Txt<Octs>
source§impl<Octs: AsRef<[u8]> + ?Sized> Txt<Octs>
impl<Octs: AsRef<[u8]> + ?Sized> Txt<Octs>
sourcepub fn iter(&self) -> TxtIter<'_> ⓘ
pub fn iter(&self) -> TxtIter<'_> ⓘ
Returns an iterator over the character strings as slices.
The returned iterator will always return at least one octets slice.
sourcepub fn iter_charstrs(&self) -> TxtCharStrIter<'_> ⓘ
pub fn iter_charstrs(&self) -> TxtCharStrIter<'_> ⓘ
Returns an iterator over the character strings.
The returned iterator will always return at least one octets slice.
sourcepub fn as_flat_slice(&self) -> Option<&[u8]>
pub fn as_flat_slice(&self) -> Option<&[u8]>
Returns the content if it consists of a single character string.
sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the length of the TXT record data.
Note that this is the length of the encoded record data and therefore never the length of the text, not even if there is only a single character string – it is still preceded by a length octet.
Note further that TXT record data is not allowed to be empty, so there
is no is_empty
method.
sourcepub fn try_text<T: FromBuilder>(
&self,
) -> Result<T, <<T as FromBuilder>::Builder as OctetsBuilder>::AppendError>
pub fn try_text<T: FromBuilder>( &self, ) -> Result<T, <<T as FromBuilder>::Builder as OctetsBuilder>::AppendError>
Returns the text content.
The method appends the content of each character string to a newly created octets builder. It does not add any delimiters between the character string.
If your octets builder is not space limited, you can use
text
instead.
sourcepub fn text<T: FromBuilder>(&self) -> Twhere
<T as FromBuilder>::Builder: EmptyBuilder,
<<T as FromBuilder>::Builder as OctetsBuilder>::AppendError: Into<Infallible>,
pub fn text<T: FromBuilder>(&self) -> Twhere
<T as FromBuilder>::Builder: EmptyBuilder,
<<T as FromBuilder>::Builder as OctetsBuilder>::AppendError: Into<Infallible>,
Returns the text content.
The method appends the content of each character string to a newly created octets builder. It does not add any delimiters between the character string.
This method is only available for octets builder types that are not
space limited. You can use try_text
with all
builder types.
Trait Implementations§
source§impl<Octs, Other> CanonicalOrd<Txt<Other>> for Txt<Octs>
impl<Octs, Other> CanonicalOrd<Txt<Other>> for Txt<Octs>
source§fn canonical_cmp(&self, other: &Txt<Other>) -> Ordering
fn canonical_cmp(&self, other: &Txt<Other>) -> Ordering
self
and other
.source§fn canonical_lt(&self, other: &Rhs) -> bool
fn canonical_lt(&self, other: &Rhs) -> bool
self
is canonically less than other
.source§fn canonical_le(&self, other: &Rhs) -> bool
fn canonical_le(&self, other: &Rhs) -> bool
self
is canonically less than or equal to other
.source§fn canonical_gt(&self, other: &Rhs) -> bool
fn canonical_gt(&self, other: &Rhs) -> bool
self
is canonically greater than other
.source§fn canonical_ge(&self, other: &Rhs) -> bool
fn canonical_ge(&self, other: &Rhs) -> bool
self
is canonically greater than or equal to other
.source§impl<Octs: AsRef<[u8]>> ComposeRecordData for Txt<Octs>
impl<Octs: AsRef<[u8]>> ComposeRecordData for Txt<Octs>
source§fn rdlen(&self, _compress: bool) -> Option<u16>
fn rdlen(&self, _compress: bool) -> Option<u16>
source§fn compose_rdata<Target: Composer + ?Sized>(
&self,
target: &mut Target,
) -> Result<(), Target::AppendError>
fn compose_rdata<Target: Composer + ?Sized>( &self, target: &mut Target, ) -> Result<(), Target::AppendError>
target
.source§fn compose_canonical_rdata<Target: Composer + ?Sized>(
&self,
target: &mut Target,
) -> Result<(), Target::AppendError>
fn compose_canonical_rdata<Target: Composer + ?Sized>( &self, target: &mut Target, ) -> Result<(), Target::AppendError>
target
.source§fn compose_len_rdata<Target: Composer + ?Sized>(
&self,
target: &mut Target,
) -> Result<(), Target::AppendError>
fn compose_len_rdata<Target: Composer + ?Sized>( &self, target: &mut Target, ) -> Result<(), Target::AppendError>
source§fn compose_canonical_len_rdata<Target: Composer + ?Sized>(
&self,
target: &mut Target,
) -> Result<(), Target::AppendError>
fn compose_canonical_len_rdata<Target: Composer + ?Sized>( &self, target: &mut Target, ) -> Result<(), Target::AppendError>
source§impl<O, N> From<Txt<O>> for AllRecordData<O, N>
impl<O, N> From<Txt<O>> for AllRecordData<O, N>
source§impl<O, N> From<Txt<O>> for ZoneRecordData<O, N>
impl<O, N> From<Txt<O>> for ZoneRecordData<O, N>
source§impl<Octs, SrcOcts> OctetsFrom<Txt<SrcOcts>> for Txt<Octs>where
Octs: OctetsFrom<SrcOcts>,
impl<Octs, SrcOcts> OctetsFrom<Txt<SrcOcts>> for Txt<Octs>where
Octs: OctetsFrom<SrcOcts>,
source§impl<Octs: AsRef<[u8]>> Ord for Txt<Octs>
impl<Octs: AsRef<[u8]>> Ord for Txt<Octs>
source§impl<'a, Octs> ParseRecordData<'a, Octs> for Txt<Octs::Range<'a>>
impl<'a, Octs> ParseRecordData<'a, Octs> for Txt<Octs::Range<'a>>
source§fn parse_rdata(
rtype: Rtype,
parser: &mut Parser<'a, Octs>,
) -> Result<Option<Self>, ParseError>
fn parse_rdata( rtype: Rtype, parser: &mut Parser<'a, Octs>, ) -> Result<Option<Self>, ParseError>
source§impl<Octs, Other> PartialOrd<Txt<Other>> for Txt<Octs>
impl<Octs, Other> PartialOrd<Txt<Other>> for Txt<Octs>
source§impl<Octs> RecordData for Txt<Octs>
impl<Octs> RecordData for Txt<Octs>
impl<Octs: AsRef<[u8]>> Eq for Txt<Octs>
Auto Trait Implementations§
impl<Octs> Freeze for Txt<Octs>
impl<Octs> RefUnwindSafe for Txt<Octs>where
Octs: RefUnwindSafe + ?Sized,
impl<Octs> Send for Txt<Octs>
impl<Octs> Sync for Txt<Octs>
impl<Octs> Unpin for Txt<Octs>
impl<Octs> UnwindSafe for Txt<Octs>where
Octs: UnwindSafe + ?Sized,
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
)