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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
use crate::types::ShortString; use log::trace; use parking_lot::Mutex; use std::sync::Arc; #[derive(Clone, Debug, Default)] pub struct ChannelStatus { inner: Arc<Mutex<Inner>>, } impl ChannelStatus { pub fn is_initializing(&self) -> bool { self.inner.lock().state == ChannelState::Initial } pub fn is_closing(&self) -> bool { self.inner.lock().state == ChannelState::Closing } pub fn is_connected(&self) -> bool { !&[ ChannelState::Initial, ChannelState::Closing, ChannelState::Closed, ChannelState::Error, ] .contains(&self.inner.lock().state) } pub fn confirm(&self) -> bool { self.inner.lock().confirm } pub(crate) fn set_confirm(&self) { self.inner.lock().confirm = true; trace!("Publisher confirms activated"); } pub fn state(&self) -> ChannelState { self.inner.lock().state.clone() } pub(crate) fn set_state(&self, state: ChannelState) { self.inner.lock().state = state } pub(crate) fn set_send_flow(&self, flow: bool) { self.inner.lock().send_flow = flow; } pub(crate) fn flow(&self) -> bool { self.inner.lock().send_flow } } #[derive(Clone, Debug, PartialEq, Eq)] pub enum ChannelState { Initial, Connected, Closing, Closed, Error, SendingContent(usize), WillReceiveContent(Option<ShortString>, Option<ShortString>), ReceivingContent(Option<ShortString>, Option<ShortString>, usize), } impl Default for ChannelState { fn default() -> Self { ChannelState::Initial } } #[derive(Debug)] struct Inner { confirm: bool, send_flow: bool, state: ChannelState, } impl Default for Inner { fn default() -> Self { Self { confirm: false, send_flow: true, state: ChannelState::default(), } } }