impl ProtocolEngine {
pub fn retire_pending_local_sibling_events(
&mut self,
matches: impl Fn(PublicKey, &UnsignedEvent) -> bool,
) -> anyhow::Result<usize> {
self.with_state_checkpoint(|engine| {
let before = engine.pending_local_sibling_sends.len();
engine.pending_local_sibling_sends.retain(|pending| {
let Some((owner, _, payload)) = decode_local_sibling_payload(&pending.payload)
else {
return true;
};
!serde_json::from_slice::<UnsignedEvent>(&payload)
.is_ok_and(|event| matches(owner, &event))
});
let retired = before - engine.pending_local_sibling_sends.len();
if retired > 0 {
engine.persist_now()?;
}
Ok(retired)
})
}
}