A batch notifier contains the status of the current batch along with
a one-shot notifier to send that status back to the source. It is
shared among all events of a batch.
An event finalizer is the shared data required to handle tracking the status of an event, and updating the status of
a batch with that when the event is dropped.
The event metadata structure is a Arc wrapper around the actual metadata to avoid cloning the
underlying data until it becomes necessary to provide a mut copy.
The key type value. This is a simple zero-overhead wrapper set up to make it explicit that
object keys are read-only and their underlying type is opaque and may change for efficiency.
This is a simple wrapper to allow attaching EventMetadata to any
other type. This is primarily used in conversion functions, such as
impl From<X> for WithMetadata<Y>.
The core trait to abstract over any type that may work as an array
of events. This is effectively the same as the standard
IntoIterator<Item = Event> implementations, but that would
conflict with the base implementation for the type aliases below.
Turn a container into a futures stream over the contained Event
type. This would ideally be implemented as a default method on
trait EventContainer, but the required feature (associated type
defaults) is still unstable.
See https://github.com/rust-lang/rust/issues/29661