pub trait CommitLogMarshaller<E>where
for<'async_trait> E: DeserializeOwned + Serialize + Send + Sync + 'async_trait,{
// Required methods
fn entity_type(&self) -> EntityType;
fn to_compaction_key(&self, entity_id: &EntityId, event: &E) -> Key;
fn to_entity_id(&self, record: &ConsumerRecord) -> Option<EntityId>;
fn envelope<'life0, 'async_trait>(
&'life0 self,
entity_id: EntityId,
record: ConsumerRecord
) -> Pin<Box<dyn Future<Output = Result<EventEnvelope<E>, CannotConsume>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn producer_record<'life0, 'life1, 'async_trait>(
&'life0 self,
topic: Topic,
entity_id: EntityId,
seq_nr: u64,
timestamp: DateTime<Utc>,
event: &'life1 E
) -> Pin<Box<dyn Future<Output = Result<ProducerRecord, CannotProduce>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
}
Expand description
Provides the ability to transform the the memory representation of Akka Persistence events from and to the records that a CommitLog expects.
Required Methods§
sourcefn entity_type(&self) -> EntityType
fn entity_type(&self) -> EntityType
Declares the entity type to the marshaller.
sourcefn to_compaction_key(&self, entity_id: &EntityId, event: &E) -> Key
fn to_compaction_key(&self, entity_id: &EntityId, event: &E) -> Key
Provide a key we can use for the purposes of log compaction. A key would generally comprise and event type value held in the high bits, and the entity id in the lower bits.
sourcefn to_entity_id(&self, record: &ConsumerRecord) -> Option<EntityId>
fn to_entity_id(&self, record: &ConsumerRecord) -> Option<EntityId>
Extract an entity id from a consumer envelope.
sourcefn envelope<'life0, 'async_trait>(
&'life0 self,
entity_id: EntityId,
record: ConsumerRecord
) -> Pin<Box<dyn Future<Output = Result<EventEnvelope<E>, CannotConsume>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn envelope<'life0, 'async_trait>( &'life0 self, entity_id: EntityId, record: ConsumerRecord ) -> Pin<Box<dyn Future<Output = Result<EventEnvelope<E>, CannotConsume>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Produce an event envelope from a consumer record. Note that this may not always be possible due to record formats having changed, in which case we want the consumer to continue and skip it. Changes in a record’s layout should not prevent the system from working.
sourcefn producer_record<'life0, 'life1, 'async_trait>(
&'life0 self,
topic: Topic,
entity_id: EntityId,
seq_nr: u64,
timestamp: DateTime<Utc>,
event: &'life1 E
) -> Pin<Box<dyn Future<Output = Result<ProducerRecord, CannotProduce>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn producer_record<'life0, 'life1, 'async_trait>( &'life0 self, topic: Topic, entity_id: EntityId, seq_nr: u64, timestamp: DateTime<Utc>, event: &'life1 E ) -> Pin<Box<dyn Future<Output = Result<ProducerRecord, CannotProduce>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
Produce a producer record from an event and its entity info.