summaryrefslogtreecommitdiff
path: root/src/boot/mod.rs
blob: 2b74de19ccf4e2f0e5ddc0bf93450a3e564062fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use std::time::Duration;

use serde::Serialize;

use crate::{channel::Channel, event::Sequence, message::Message, user::User};

pub mod app;
pub mod routes;

#[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)
}