summaryrefslogtreecommitdiff
path: root/src/boot/mod.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-04-10 20:50:13 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-04-10 20:50:13 -0400
commit1ef57107b1c355ef896327f0714344277df7ae18 (patch)
tree9874d3d61f0bdb13913c6c4d079fbb82b336f656 /src/boot/mod.rs
parent0fc3057b05dddb4eba142deeb6373ed37e312c60 (diff)
parent1ee129176eb71f5e246462b66fd9c9862ed1ee7a (diff)
Use a heartbeat to allow the client to reconnect after network failures.
Diffstat (limited to 'src/boot/mod.rs')
-rw-r--r--src/boot/mod.rs15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/boot/mod.rs b/src/boot/mod.rs
index c52b088..122bd53 100644
--- a/src/boot/mod.rs
+++ b/src/boot/mod.rs
@@ -1,14 +1,25 @@
+use crate::{channel::Channel, event::Sequence, message::Message, user::User};
+use serde::Serialize;
+use std::time::Duration;
+
pub mod app;
mod routes;
-use crate::{channel::Channel, event::Sequence, message::Message, user::User};
-
pub use self::routes::router;
#[derive(serde::Serialize)]
pub struct Snapshot {
pub resume_point: Sequence,
+ #[serde(serialize_with = "as_seconds")]
+ pub heartbeat: Duration,
pub users: Vec<User>,
pub channels: Vec<Channel>,
pub messages: Vec<Message>,
}
+
+fn as_seconds<S>(duration: &Duration, serializer: S) -> Result<S::Ok, S::Error>
+where
+ S: serde::Serializer,
+{
+ duration.as_secs().serialize(serializer)
+}