use std::sync::Arc;
use tokio::sync::watch;
use super::{LastEnqueuedEventProperties, PartitionEvent};
#[derive(Debug)]
pub struct PartitionContext {
pub(crate) fully_qualified_namespace: Arc<String>,
pub(crate) event_hub_name: Arc<String>,
pub(crate) consumer_group: Arc<String>,
pub(crate) partition_id: Arc<String>,
pub(crate) watch_last_received_event: watch::Receiver<Option<PartitionEvent>>,
}
impl PartitionContext {
pub fn fully_qualified_namespace(&self) -> &str {
&self.fully_qualified_namespace
}
pub fn event_hub_name(&self) -> &str {
&self.event_hub_name
}
pub fn consumer_group(&self) -> &str {
&self.consumer_group
}
pub fn partition_id(&self) -> &str {
&self.partition_id
}
pub fn read_last_enqueued_event_properties(&self) -> LastEnqueuedEventProperties {
let last_enqueued_event = self.watch_last_received_event.borrow();
let sequence_number = last_enqueued_event
.as_ref()
.and_then(|event| event.last_partition_sequence_number());
let offset = last_enqueued_event
.as_ref()
.and_then(|event| event.last_partition_offset());
let enqueued_time = last_enqueued_event
.as_ref()
.and_then(|event| event.last_partition_enqueued_time());
let last_received_time = last_enqueued_event
.as_ref()
.and_then(|event| event.last_partition_properties_retrieval_time());
LastEnqueuedEventProperties {
sequence_number,
offset,
enqueued_time,
last_received_time,
}
}
}