use crate::message::Message;
use std::collections::HashMap;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
pub enum ExchangePattern {
#[default]
InOnly,
InOut,
}
#[derive(Clone, Debug, Default)]
pub struct Exchange {
pub pattern: ExchangePattern,
pub r#in: Message,
pub out: Option<Message>,
pub properties: HashMap<String, String>,
}
impl Exchange {
pub fn new(body: impl Into<crate::message::Body>) -> Self {
Self {
r#in: Message::new(body),
..Self::default()
}
}
pub fn with_pattern(mut self, p: ExchangePattern) -> Self {
self.pattern = p;
self
}
pub fn effective_message(&self) -> &Message {
self.out.as_ref().unwrap_or(&self.r#in)
}
pub fn advance(&mut self) {
if let Some(out) = self.out.take() {
self.r#in = out;
}
}
}