fundamentum_sdk_mqtt/models/
heart_beat.rs1use serde::{Deserialize, Serialize};
4
5use crate::{Device, Error, PublishOptions, Publishable};
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
9pub struct HeartBeat {
10 uptime: u64,
12}
13
14impl HeartBeat {
15 #[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}