Pending

Struct Pending 

pub(super) struct Pending {
    pub(super) publishes: HashMap<PacketId, PendingPublish>,
    pub(super) acks: HashMap<PacketId, PendingAck>,
    deadlines: BTreeSet<(Instant, PacketId)>,
    ack_timeout: Option<Duration>,
}

Fields§

§publishes: HashMap<PacketId, PendingPublish>

User-visible publish completions, keyed by the wire packet identifier. Per §4.4 the packet identifier is preserved across reconnects when the session is resumed, so it doubles as the stable handle for correlating PUBACK/PUBCOMP with the originating publish future.

§acks: HashMap<PacketId, PendingAck>

SUBSCRIBE and UNSUBSCRIBE completions, keyed by packet id. Packet ids are unique across operations, so a single map serves both (a SUBACK and an UNSUBACK can never collide on the same id).

§deadlines: BTreeSet<(Instant, PacketId)>

Ack-timeout schedule: one (deadline, packet_id) per in-flight operation that has been written to the wire, ordered so the earliest deadline is first. Empty when ack_timeout is disabled. Entries are removed exactly (keyed by the deadline stored on the operation) as operations are acknowledged, so no stale entry ever survives to fire.

§ack_timeout: Option<Duration>

Per-operation acknowledgement deadline. None disables the schedule.

Implementations§

§

impl Pending

pub(super) fn new(ack_timeout: Option<Duration>) -> Self

pub(super) fn earliest_deadline(&self) -> Option<Instant>

Earliest outstanding ack deadline, if any. The event loop arms its ack timer to this instant.

pub(super) fn mark_publish_sent(&mut self, packet_id: PacketId)

Arms (or re-arms, on retransmit) the ack deadline for a just-sent publish, including a QoS 2 PUBREL retransmit (same packet id as the publish it completes). No-op when the timeout is disabled or the publish is no longer tracked.

pub(super) fn mark_ack_sent(&mut self, packet_id: PacketId)

Arms the ack deadline for a just-sent SUBSCRIBE/UNSUBSCRIBE. No-op when the timeout is disabled or the operation is no longer tracked.

pub(super) fn remove_publish( &mut self, packet_id: PacketId, ) -> Option<PendingPublish>

Removes a publish, dropping its ack-deadline schedule entry.

pub(super) fn remove_ack(&mut self, packet_id: PacketId) -> Option<PendingAck>

Removes a SUBSCRIBE/UNSUBSCRIBE, dropping its ack-deadline schedule entry.

pub(super) fn fail_all(&mut self)

Fails every outstanding operation; used on user-requested disconnect when the client is being torn down. In-flight publishes are also failed (their futures resolve with Error::ConnectionClosed); the messages themselves remain in the session for retransmission on the next connection.

pub(super) fn fail_superseded_acks(&mut self, client: &Client<JournaledSession>)

Fails parked SUBSCRIBE/UNSUBSCRIBE completions superseded by a later request for the same filter, dropping their ack-deadline entries. See fail_superseded_acks.

Auto Trait Implementations§

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.

§

impl<T> Instrument for T

§

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

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

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,