summaryrefslogtreecommitdiff
path: root/src/boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/boot')
-rw-r--r--src/boot/app.rs4
-rw-r--r--src/boot/mod.rs15
2 files changed, 16 insertions, 3 deletions
diff --git a/src/boot/app.rs b/src/boot/app.rs
index f531afe..cd45c38 100644
--- a/src/boot/app.rs
+++ b/src/boot/app.rs
@@ -3,7 +3,7 @@ use sqlx::sqlite::SqlitePool;
use super::Snapshot;
use crate::{
channel::{self, repo::Provider as _},
- event::repo::Provider as _,
+ event::{Heartbeat, repo::Provider as _},
message::repo::Provider as _,
name,
user::{self, repo::Provider as _},
@@ -21,6 +21,7 @@ impl<'a> Boot<'a> {
pub async fn snapshot(&self) -> Result<Snapshot, Error> {
let mut tx = self.db.begin().await?;
let resume_point = tx.sequence().current().await?;
+ let heartbeat = Heartbeat::TIMEOUT;
let users = tx.users().all(resume_point).await?;
let channels = tx.channels().all(resume_point).await?;
@@ -45,6 +46,7 @@ impl<'a> Boot<'a> {
Ok(Snapshot {
resume_point,
+ heartbeat,
users,
channels,
messages,
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)
+}