fundamentum_sdk_mqtt/models/
heart_beat.rs

1//! `HeartBeat` module
2//!
3use serde::{Deserialize, Serialize};
4
5use crate::{Device, Error, PublishOptions, Publishable};
6
7/// `HeartBeat`
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
9pub struct HeartBeat {
10    /// Number of second since boot
11    uptime: u64,
12}
13
14impl HeartBeat {
15    /// Create a new `HeartBeat` body
16    #[must_use]
17    pub const fn new(uptime: u64) -> Self {
18        Self { uptime }
19    }
20}
21
22impl Publishable for HeartBeat {
23    type Error = Error;
24
25    fn topic(&self, device: &Device) -> impl Into<String> + Send {
26        format!(
27            "registries/{}/devices/{}/heartbeat",
28            device.registry_id(),
29            device.serial()
30        )
31    }
32
33    fn payload(&self) -> Result<impl Into<bytes::Bytes> + Send, Error> {
34        Ok(serde_json::to_vec(self)?)
35    }
36
37    fn publish_overrides(&self) -> PublishOptions {
38        PublishOptions::default()
39    }
40}