rabbitmq-stream-client 0.6.0

A Rust client for RabbitMQ Stream
use rabbitmq_stream_protocol::message::Message;

pub trait BaseMessage {
    fn publishing_id(&self) -> Option<u64>;
    fn to_message(self) -> Message;
    fn filter_value(&self) -> Option<String>;
}

impl BaseMessage for Message {
    fn publishing_id(&self) -> Option<u64> {
        self.publishing_id().copied()
    }

    fn to_message(self) -> Message {
        self
    }

    fn filter_value(&self) -> Option<String> {
        None
    }
}

#[derive(Debug)]
pub struct ClientMessage {
    publishing_id: u64,
    message: Message,
    filter_value: Option<String>,
}

impl ClientMessage {
    pub fn new(publishing_id: u64, message: Message, filter_value: Option<String>) -> Self {
        Self {
            publishing_id,
            message,
            filter_value,
        }
    }

    pub fn filter_value_extract(&mut self, filter_value_extractor: impl Fn(&Message) -> String) {
        self.filter_value = Some(filter_value_extractor(&self.message));
    }
}

impl BaseMessage for ClientMessage {
    fn publishing_id(&self) -> Option<u64> {
        Some(self.publishing_id)
    }

    fn to_message(self) -> Message {
        self.message
    }

    fn filter_value(&self) -> Option<String> {
        self.filter_value.clone()
    }
}