use std::{fmt, sync::Arc};
use indexmap::IndexMap;
use matrix_sdk::deserialized_responses::EncryptionInfo;
use ruma::{
OwnedEventId, OwnedTransactionId, OwnedUserId,
events::{AnySyncTimelineEvent, receipt::Receipt},
serde::Raw,
};
#[derive(Clone)]
pub(in crate::timeline) struct RemoteEventTimelineItem {
pub event_id: OwnedEventId,
pub transaction_id: Option<OwnedTransactionId>,
pub read_receipts: IndexMap<OwnedUserId, Receipt>,
pub is_own: bool,
pub is_highlighted: bool,
pub encryption_info: Option<Arc<EncryptionInfo>>,
pub original_json: Option<Raw<AnySyncTimelineEvent>>,
pub latest_edit_json: Option<Raw<AnySyncTimelineEvent>>,
pub origin: RemoteEventOrigin,
}
impl RemoteEventTimelineItem {
pub fn redact(&self) -> Self {
Self { original_json: None, latest_edit_json: None, ..self.clone() }
}
}
#[derive(Clone, Copy, Debug)]
pub(in crate::timeline) enum RemoteEventOrigin {
Cache,
Sync,
Pagination,
Unknown,
}
#[cfg(not(tarpaulin_include))]
impl fmt::Debug for RemoteEventTimelineItem {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let Self {
event_id,
transaction_id,
read_receipts,
is_own,
encryption_info,
original_json: _,
latest_edit_json: _,
is_highlighted,
origin,
} = self;
f.debug_struct("RemoteEventTimelineItem")
.field("event_id", event_id)
.field("transaction_id", transaction_id)
.field("read_receipts", read_receipts)
.field("is_own", is_own)
.field("is_highlighted", is_highlighted)
.field("encryption_info", encryption_info)
.field("origin", origin)
.finish_non_exhaustive()
}
}