1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
use log::error; use parking_lot::Mutex; use std::sync::Arc; use crate::{ channel::BasicProperties, message::BasicReturnMessage, }; #[derive(Clone, Debug, Default)] pub struct ReturnedMessages { inner: Arc<Mutex<Inner>>, } impl ReturnedMessages { pub fn start_new_delivery(&self, message: BasicReturnMessage) { self.inner.lock().current_message = Some(message); } pub fn set_delivery_properties(&self, properties: BasicProperties) { if let Some(message) = self.inner.lock().current_message.as_mut() { message.delivery.properties = properties; } } pub fn new_delivery_complete(&self) { self.inner.lock().new_delivery_complete(); } pub fn receive_delivery_content(&self, data: Vec<u8>) { if let Some(message) = self.inner.lock().current_message.as_mut() { message.delivery.data.extend(data); } } pub fn drain(&self) -> Vec<BasicReturnMessage> { self.inner.lock().messages.drain(..).collect() } } #[derive(Debug, Default)] pub struct Inner { current_message: Option<BasicReturnMessage>, messages: Vec<BasicReturnMessage>, } impl Inner { fn new_delivery_complete(&mut self) { if let Some(message) = self.current_message.take() { error!("Server returned us a message: {:?}", message); self.messages.push(message); } } }