pub struct Record<N: ToDname, D: RecordData> { /* private fields */ }Expand description
A DNS resource record.
All information available through the DNS is stored in resource records. They have a three part key of a domain name, resource record type, and class. Data is arranged in a tree which is navigated using the domain name. Each node in the tree carries a label, starting with the root label as the top-most node. The tree is traversed by stepping through the name from right to left, finding a child node carring the label of each step. The domain name resulting from this traversal is part of the record itself. It is called the owner of the record.
The record type describes the kind of data the record holds, such as IP addresses. The class, finally, describes which sort of network the information is for since DNS was originally intended to be used for networks other than the Internet as well. In practice, the only relevant class is IN, the Internet. Note that each class has its own tree of nodes.
The payload of a resource record is its data. Its purpose, meaning, and format is determined by the record type (technically, also its class). For each unique three-part key there can be multiple resource records. All these records for the same key are called resource record sets, most often shortened to ‘RRset.’
There is one more piece of data: the TTL or time to live. This value says how long a record remains valid before it should be refreshed from its original source, given in seconds. The TTL is used to add caching facilities to the DNS.
Values of the Record type represent one single resource record. Since
there are currently more than eighty record types—see Rtype for a
complete list—, the type is generic over a trait for record data. This
trait holds both the record type value and the record data as they are
inseparably entwined.
Because a record’s owner is a domain name, the Record type is
additionally generic over the domain name type is for it.
There is three ways to create a record value. First, you can make one
yourself using the new function. It will neatly take care of all
the generics through type inference. Secondly, you can parse a record
from an existing message. Message and its friends provide a way to
do that; see there for all the details. Finally, you can scan a record
from master data (aka zonefiles). See the domain::master module for
that.
Records can be place into DNS messages by using a MessageBuilder. In
order to make adding records easier, Record implements the From trait
for two kinds of tuples: A four-tuple of owner, class, time-to-live value,
and record data and a triple leaving out the class and assuming it to be
Class::In.
Implementations§
Source§impl<N: ToDname, D: RecordData> Record<N, D>
§Creation and Element Access
impl<N: ToDname, D: RecordData> Record<N, D>
§Creation and Element Access
Sourcepub fn new(owner: N, class: Class, ttl: u32, data: D) -> Self
pub fn new(owner: N, class: Class, ttl: u32, data: D) -> Self
Creates a new record from its parts.
Sourcepub fn owner(&self) -> &N
pub fn owner(&self) -> &N
Returns a reference to owner domain name.
The owner of a record is the domain name that specifies the node in the DNS tree this record belongs to.
Sourcepub fn rtype(&self) -> Rtypewhere
D: RecordData,
pub fn rtype(&self) -> Rtypewhere
D: RecordData,
Returns the record type.