Enum Qos

Source
#[repr(u8)]
pub enum Qos { AtMostOnce = 0, AtLeastOnce = 1, ExactlyOnce = 2, }
Expand description

MQTT Quality of Service levels

Defines the delivery guarantee levels for MQTT message publishing and subscription. Each QoS level provides different guarantees about message delivery, with higher levels providing stronger guarantees at the cost of increased overhead.

The QoS level is specified in PUBLISH packets and affects how the message is handled by both the sender and receiver according to the MQTT protocol specification.

§QoS Level Descriptions

  • QoS 0 (At Most Once): Fire-and-forget delivery. Messages are delivered at most once, or not at all. No acknowledgment is required.
  • QoS 1 (At Least Once): Acknowledged delivery. Messages are delivered at least once. Duplicates may occur but will be handled by the receiver.
  • QoS 2 (Exactly Once): Assured delivery. Messages are delivered exactly once using a four-part handshake protocol.

§Protocol Behavior

Each QoS level has specific protocol requirements:

  • QoS 0: PUBLISH packet is sent without expecting acknowledgment
  • QoS 1: PUBLISH packet must be acknowledged with PUBACK
  • QoS 2: PUBLISH packet initiates a handshake: PUBLISH -> PUBREC -> PUBREL -> PUBCOMP

§Examples

use mqtt_protocol_core::mqtt;

// Fire-and-forget message delivery
let qos0 = mqtt::packet::Qos::AtMostOnce;

// Acknowledged delivery with possible duplicates
let qos1 = mqtt::packet::Qos::AtLeastOnce;

// Exactly-once delivery with handshake
let qos2 = mqtt::packet::Qos::ExactlyOnce;

// Convert from byte value
let qos_from_byte = mqtt::packet::Qos::try_from(1u8).unwrap();
assert_eq!(qos_from_byte, mqtt::packet::Qos::AtLeastOnce);

Variants§

§

AtMostOnce = 0

QoS level 0: At most once delivery

Messages are delivered at most once, or not at all. There is no acknowledgment of delivery and no retry mechanism. This is the fastest delivery method but provides no guarantee that the message will be received.

This level is suitable for:

  • High-frequency sensor data where missing occasional readings is acceptable
  • Applications where message loss is tolerable
  • Scenarios where network bandwidth and battery life are critical
§

AtLeastOnce = 1

QoS level 1: At least once delivery

Messages are delivered at least once. The receiver acknowledges delivery with a PUBACK packet. If the sender doesn’t receive the acknowledgment within a reasonable time, it retransmits the message. Duplicate messages may occur and should be handled by the application.

This level is suitable for:

  • Applications that can handle duplicate messages
  • Scenarios where message delivery is important but duplicates are acceptable
  • Most general-purpose messaging use cases
§

ExactlyOnce = 2

QoS level 2: Exactly once delivery

Messages are delivered exactly once using a four-part handshake protocol (PUBLISH -> PUBREC -> PUBREL -> PUBCOMP). This guarantees that messages are neither lost nor duplicated, but requires the most network traffic and processing overhead.

This level is suitable for:

  • Financial transactions or billing information
  • Critical control messages
  • Applications where duplicate processing would cause serious problems

Trait Implementations§

Source§

impl Clone for Qos

Source§

fn clone(&self) -> Qos

Returns a duplicate 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 Qos

Source§

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

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

impl<'de> Deserialize<'de> for Qos

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for Qos

Implementation of Display for Qos

Formats the QoS level as a human-readable string representation. This allows QoS values to be used with println!, format!, and other string formatting operations.

§Output Format

  • Qos::AtMostOnce -> “AtMostOnce”
  • Qos::AtLeastOnce -> “AtLeastOnce”
  • Qos::ExactlyOnce -> “ExactlyOnce”
Source§

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

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

impl Ord for Qos

Source§

fn cmp(&self, other: &Qos) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Qos

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Qos

Source§

fn partial_cmp(&self, other: &Qos) -> 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

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

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

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Serialize for Qos

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl TryFrom<u8> for Qos

Source§

type Error = TryFromPrimitiveError<Qos>

The type returned in the event of a conversion error.
Source§

fn try_from(number: u8) -> Result<Self, TryFromPrimitiveError<Self>>

Performs the conversion.
Source§

impl TryFromPrimitive for Qos

Source§

impl Copy for Qos

Source§

impl Eq for Qos

Source§

impl StructuralPartialEq for Qos

Auto Trait Implementations§

§

impl Freeze for Qos

§

impl RefUnwindSafe for Qos

§

impl Send for Qos

§

impl Sync for Qos

§

impl Unpin for Qos

§

impl UnwindSafe for Qos

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> AsConcrete<T> for T

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<T> IntoConcreteOwned<T> for T

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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§

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>,

Source§

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>,

Source§

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<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,