use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
use crate::value_objects::CeremonyId;
use super::{MemoryEntry, MemoryEntryId, MemoryEntryKind};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RecalledEntry {
id: MemoryEntryId,
kind: MemoryEntryKind,
summary: String,
from_ceremony: CeremonyId,
#[serde(with = "time::serde::rfc3339")]
observed_at: OffsetDateTime,
}
impl RecalledEntry {
#[must_use]
pub fn of(entry: &MemoryEntry) -> Self {
Self {
id: entry.id().clone(),
kind: entry.kind(),
summary: entry.summary().to_owned(),
from_ceremony: entry.provenance().ceremony_id().clone(),
observed_at: entry.provenance().observed_at(),
}
}
#[must_use]
pub fn id(&self) -> &MemoryEntryId {
&self.id
}
#[must_use]
pub const fn kind(&self) -> MemoryEntryKind {
self.kind
}
#[must_use]
pub fn summary(&self) -> &str {
&self.summary
}
#[must_use]
pub fn from_ceremony(&self) -> &CeremonyId {
&self.from_ceremony
}
#[must_use]
pub const fn observed_at(&self) -> OffsetDateTime {
self.observed_at
}
pub(super) fn cost(&self) -> usize {
self.summary.len()
}
}