diff --git a/rust/src/events/serialize.rs b/rust/src/events/serialize.rs index 758fd103f3..42e08d155e 100644 --- a/rust/src/events/serialize.rs +++ b/rust/src/events/serialize.rs @@ -477,7 +477,7 @@ fn serialize_event_value( // us it *should* be an integer, but it is possible for it to be out of i64 // range. In that case, just omit `age` rather than erroring. let unsigned = unsigned_mut(&mut d); - if let Some(age_ts) = unsigned.get(unsigned_field::AGE_TS).and_then(Value::as_i64) { + if let Some(age_ts) = event.unsigned().age_ts()?.and_then(|n| n.as_i64()) { unsigned.insert( unsigned_field::AGE.to_owned(), Value::Number(Number::from(time_now_ms - age_ts)), diff --git a/rust/src/events/unsigned.rs b/rust/src/events/unsigned.rs index 931c412325..8db0a338bd 100644 --- a/rust/src/events/unsigned.rs +++ b/rust/src/events/unsigned.rs @@ -291,6 +291,14 @@ impl Unsigned { } } +impl Unsigned { + /// Get the `age_ts` field, which is used to generate the `age` field when + /// serializing an event. + pub fn age_ts(&self) -> PyResult> { + Ok(self.py_read()?.persisted_fields.age_ts.clone()) + } +} + fn room_state_to_py<'py>( py: Python<'py>, state: &[serde_json::Value],