#[macro_export]
macro_rules! create_static_publisher {
($publisher_name:ident,
id_type = $id_t:ty,
msg_type = $msg_t:ty,
entry_type = $entry_t:ty,
interm_event_type = $interm_event_t:ty,
$(filter_type=$filter_t:ty,)?
$(filter=$filter:expr,)?
capture_channel_bound = $cap_channel_bound:expr,
subscription_channel_bound = $sub_channel_bound:expr,
capture_mode = $capture_mode:expr,
timestamp_kind = $timestamp_kind:expr
) => {
$crate::z__setup_static_publisher!(
$publisher_name,
$id_t,
$msg_t,
$entry_t,
$interm_event_t,
$cap_channel_bound,
$sub_channel_bound,
$capture_mode,
$timestamp_kind
$(, filter_type=$filter_t)?
$(, filter=$filter)?
);
};
($visibility:vis $publisher_name:ident,
id_type = $id_t:ty,
msg_type = $msg_t:ty,
entry_type = $entry_t:ty,
interm_event_type = $interm_event_t:ty,
$(filter_type=$filter_t:ty,)?
$(filter=$filter:expr,)?
capture_channel_bound = $cap_channel_bound:expr,
subscription_channel_bound = $sub_channel_bound:expr,
capture_mode = $capture_mode:expr,
timestamp_kind = $timestamp_kind:expr
) => {
$crate::z__setup_static_publisher!(
$publisher_name,
$id_t,
$msg_t,
$entry_t,
$interm_event_t,
$cap_channel_bound,
$sub_channel_bound,
$capture_mode,
$timestamp_kind,
scope = $visibility
$(, filter_type=$filter_t)?
$(, filter=$filter)?
);
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! z__setup_static_publisher {
($publisher_name:ident,
$id_t:ty,
$msg_t:ty,
$entry_t:ty,
$interm_event_t:ty,
$cap_channel_bound:expr,
$sub_channel_bound:expr,
$capture_mode:expr,
$timestamp_kind:expr
$(, scope=$visibility:vis)?
$(, filter_type=$filter_t:ty)?
$(, filter=$filter:expr)?
) => {
$crate::z__create_static_publisher!(
$publisher_name,
$id_t,
$msg_t,
$entry_t,
$interm_event_t,
$(filter_type=$filter_t,)?
$(filter=$filter,)?
$cap_channel_bound,
$sub_channel_bound,
$capture_mode,
$timestamp_kind
$(, scope=$visibility)?
);
impl Drop for $interm_event_t {
fn drop(&mut self) {
$publisher_name._capture(self);
}
}
impl $interm_event_t {
pub fn finalize(self) -> $crate::event::finalized::FinalizedEvent<$id_t> {
$crate::event::intermediary::IntermediaryEvent::<$id_t, $msg_t, $entry_t>::finalize(self)
}
}
impl From<$interm_event_t> for $id_t {
fn from(intermed_event: $interm_event_t) -> Self {
$crate::event::intermediary::IntermediaryEvent::<$id_t, $msg_t, $entry_t>::finalize(intermed_event).into_event_id()
}
}
impl PartialEq for $entry_t {
fn eq(&self, other: &Self) -> bool {
$crate::event::entry::EventEntry::<$id_t, $msg_t>::get_event_id(self) == $crate::event::entry::EventEntry::<$id_t, $msg_t>::get_event_id(other)
&& $crate::event::entry::EventEntry::<$id_t, $msg_t>::get_entry_id(self) == $crate::event::entry::EventEntry::<$id_t, $msg_t>::get_entry_id(other)
}
}
impl Eq for $entry_t {}
impl std::hash::Hash for $entry_t
{
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
$crate::event::entry::EventEntry::<$id_t, $msg_t>::get_entry_id(self).hash(state);
}
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! z__create_static_publisher {
($publisher_name:ident,
$id_t:ty,
$msg_t:ty,
$entry_t:ty,
$interm_event_t:ty,
filter_type=$filter_t:ty,
filter=$filter:expr,
$cap_channel_bound:expr,
$sub_channel_bound:expr,
$capture_mode:expr,
$timestamp_kind:expr
$(, scope=$visibility:vis)?
) => {
$($visibility)? static $publisher_name: $crate::once_cell::sync::Lazy<
$crate::publisher::EvidentPublisher<$id_t, $msg_t, $entry_t, $filter_t>,
> = $crate::once_cell::sync::Lazy::new(|| {
$crate::publisher::EvidentPublisher::<
$id_t,
$msg_t,
$entry_t,
$filter_t
>::with(|event| {
$publisher_name.on_event(event);
}, $filter, $capture_mode, $cap_channel_bound, $sub_channel_bound, $timestamp_kind)
});
};
($publisher_name:ident,
$id_t:ty,
$msg_t:ty,
$entry_t:ty,
$interm_event_t:ty,
$cap_channel_bound:expr,
$sub_channel_bound:expr,
$capture_mode:expr,
$timestamp_kind:expr
$(, scope=$visibility:vis)?
) => {
type DummyFilter = $crate::event::filter::DummyFilter<$id_t, $msg_t>;
$($visibility)? static $publisher_name: $crate::once_cell::sync::Lazy<
$crate::publisher::EvidentPublisher<$id_t, $msg_t, $entry_t, DummyFilter>,
> = $crate::once_cell::sync::Lazy::new(|| {
$crate::publisher::EvidentPublisher::<
$id_t,
$msg_t,
$entry_t,
DummyFilter
>::new(|event| {
$publisher_name.on_event(event);
}, $capture_mode, $cap_channel_bound, $sub_channel_bound, $timestamp_kind)
});
}
}
#[macro_export]
macro_rules! create_set_event_macro {
(id_type = $id_t:ty,
msg_type = $msg_t:ty,
entry_type = $entry_t:ty,
interm_event_type = $interm_event_t:ty
) => {
#[macro_export]
macro_rules! set_event {
($id:expr) => {
$crate::event::set_event::<$id_t, $msg_t, $entry_t, $interm_event_t>(
$id,
$crate::this_origin!(),
)
};
($id:expr, $msg:expr) => {
$crate::event::set_event_with_msg::<$id_t, $msg_t, $entry_t, $interm_event_t>(
$id,
$msg,
$crate::this_origin!(),
)
};
}
};
(no_export,
id_type = $id_t:ty,
msg_type = $msg_t:ty,
entry_type = $entry_t:ty,
interm_event_type = $interm_event_t:ty
) => {
macro_rules! set_event {
($id:expr) => {
$crate::event::set_event::<$id_t, $msg_t, $entry_t, $interm_event_t>(
$id,
$crate::this_origin!(),
)
};
($id:expr, $msg:expr) => {
$crate::event::set_event_with_msg::<$id_t, $msg_t, $entry_t, $interm_event_t>(
$id,
$msg,
$crate::this_origin!(),
)
};
}
};
}