extern crate alloc;
use alloc::vec::Vec;
use core::fmt::Write;
use heapless::String;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Device<'a> {
#[serde(rename = "ids")]
pub identifiers: Vec<&'a str>,
pub name: &'a str,
#[serde(rename = "mdl", skip_serializing_if = "Option::is_none")]
pub model: Option<&'a str>,
#[serde(rename = "mf", skip_serializing_if = "Option::is_none")]
pub manufacturer: Option<&'a str>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Component<'a> {
pub name: &'a str,
#[serde(rename = "stat_t")]
pub state_topic: &'a str,
#[serde(rename = "unit_of_meas", skip_serializing_if = "Option::is_none")]
pub unit_of_measurement: Option<&'a str>,
#[serde(rename = "dev_cla", skip_serializing_if = "Option::is_none")]
pub device_class: Option<&'a str>,
#[serde(rename = "uniq_id")]
pub unique_id: &'a str,
#[serde(rename = "val_tpl", skip_serializing_if = "Option::is_none")]
pub value_template: Option<&'a str>,
#[serde(rename = "dev", skip_serializing_if = "Option::is_none")]
pub device: Option<Device<'a>>,
}
impl<'a> Component<'a> {
pub fn get_discovery_topic(&self) -> String<256> {
let mut s: String<256> = String::new();
write!(s, "homeassistant/sensor/{}/config", self.unique_id).unwrap();
s
}
}