lapin 2.1.1

AMQP client library
Documentation
use crate::{
    channel_status::ChannelStatus, internal_rpc::InternalRPCHandle, protocol, types::ChannelId,
};
use std::fmt;

pub(crate) struct ChannelCloser {
    id: ChannelId,
    status: ChannelStatus,
    internal_rpc: InternalRPCHandle,
}

impl ChannelCloser {
    pub(crate) fn new(
        id: ChannelId,
        status: ChannelStatus,
        internal_rpc: InternalRPCHandle,
    ) -> Self {
        Self {
            id,
            status,
            internal_rpc,
        }
    }
}

impl fmt::Debug for ChannelCloser {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_struct("ChannelCloser")
            .field("id", &self.id)
            .field("status", &self.status)
            .finish()
    }
}

impl Drop for ChannelCloser {
    fn drop(&mut self) {
        if self.status.auto_close(self.id) {
            self.internal_rpc.close_channel(
                self.id,
                protocol::constants::REPLY_SUCCESS,
                "OK".to_string(),
            );
        }
    }
}