Struct domain::base::serial::Serial

source ·
pub struct Serial(pub u32);
Expand description

A serial number.

Serial numbers are used in DNS to track changes to resources. For instance, the Soa record type provides a serial number that expresses the version of the zone. Since these numbers are only 32 bits long, they can wrap. RFC 1982 defined the semantics for doing arithmetics in the face of these wrap-arounds. This type implements these semantics atop a native u32.

The RFC defines two operations: addition and comparison.

For addition, the amount added can only be a positive number of up to 2^31 - 1. Because of this, we decided to not implement the Add trait but rather have a dedicated method add so as to not cause surprise panics.

Serial numbers only implement a partial ordering. That is, there are pairs of values that are not equal but there still isn’t one value larger than the other. Since this is neatly implemented by the PartialOrd trait, the type implements that.

Tuple Fields§

§0: u32

Implementations§

source§

impl Serial

source

pub fn now() -> Self

Returns a serial number for the current Unix time.

source

pub fn from_be_bytes(bytes: [u8; 4]) -> Self

Creates a new serial number from its octets in big endian notation.

source

pub fn into_int(self) -> u32

Returns the serial number as a raw integer.

source

pub fn add(self, other: u32) -> Self

Add other to self.

Serial numbers only allow values of up to 2^31 - 1 to be added to them. Therefore, this method requires other to be a u32 instead of a Serial to indicate that you cannot simply add two serials together. This is also why we don’t implement the Add trait.

§Panics

This method panics if other is greater than 2^31 - 1.

source

pub fn scan<S: Scanner>(scanner: &mut S) -> Result<Self, S::Error>

source

pub fn scan_rrsig<S: Scanner>(scanner: &mut S) -> Result<Self, S::Error>

Scan a serial represention signature time value.

In RRSIG records, the expiration and inception times are given as serial values. Their representation format can either be the value or a specific date in YYYYMMDDHHmmSS format.

source

pub fn rrsig_from_str(src: &str) -> Result<Self, IllegalSignatureTime>

Parses a serial representing a time value from a string.

In RRSIG records, the expiration and inception times are given as serial values. Their representation format can either be the value or a specific date in YYYYMMDDHHmmSS format.

source§

impl Serial

§Parsing and Composing

source

pub const COMPOSE_LEN: u16 = 4u16

source

pub fn parse<Octs: AsRef<[u8]> + ?Sized>( parser: &mut Parser<'_, Octs>, ) -> Result<Self, ParseError>

source

pub fn compose<Target: Composer + ?Sized>( &self, target: &mut Target, ) -> Result<(), Target::AppendError>

Trait Implementations§

source§

impl CanonicalOrd for Serial

source§

fn canonical_cmp(&self, other: &Self) -> Ordering

Returns the canonical ordering between self and other.
source§

fn canonical_lt(&self, other: &Rhs) -> bool

Returns whether self is canonically less than other.
source§

fn canonical_le(&self, other: &Rhs) -> bool

Returns whether self is canonically less than or equal to other.
source§

fn canonical_gt(&self, other: &Rhs) -> bool

Returns whether self is canonically greater than other.
source§

fn canonical_ge(&self, other: &Rhs) -> bool

Returns whether self is canonically greater than or equal to other.
source§

impl Clone for Serial

source§

fn clone(&self) -> Serial

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 Debug for Serial

source§

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

Formats the value using the given formatter. Read more
source§

impl Display for Serial

source§

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

Formats the value using the given formatter. Read more
source§

impl From<Serial> for u32

source§

fn from(serial: Serial) -> u32

Converts to this type from the input type.
source§

impl From<u32> for Serial

source§

fn from(value: u32) -> Serial

Converts to this type from the input type.
source§

impl FromStr for Serial

§

type Err = <u32 as FromStr>::Err

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
source§

impl Hash for Serial

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for Serial

source§

fn eq(&self, other: &Serial) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Serial

source§

fn partial_cmp(&self, other: &Serial) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Copy for Serial

source§

impl Eq for Serial

source§

impl StructuralPartialEq for Serial

Auto Trait Implementations§

§

impl Freeze for Serial

§

impl RefUnwindSafe for Serial

§

impl Send for Serial

§

impl Sync for Serial

§

impl Unpin for Serial

§

impl UnwindSafe for Serial

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where 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 T
where 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 Source
where 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) -> Target
where Self::Error: Into<Infallible>,

Performs an infallible conversion.
source§

impl<T> ToOwned for T
where 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> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where 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 T
where 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 T
where V: MultiLane<T>,

source§

fn vzip(self) -> V