use std::{convert::Infallible, time::Duration};
use uuid::Uuid;
use crate::client::{DeviceBase, HlapiClient, HlapiClientError};
#[derive(Debug, Clone)]
pub struct Furnace {
client: HlapiClient,
uuid: Uuid,
}
impl Furnace {
pub fn get_burn_duration(&self) -> Result<Option<Duration>, HlapiClientError> {
let raw: u32 = self.call("getBurnDuration", &[], &[])?.0;
if raw == 0 {
Ok(None)
} else {
Ok(Some(Duration::from_millis(raw as u64 * 50)))
}
}
pub fn get_burn_time(&self) -> Result<Option<Duration>, HlapiClientError> {
let raw: u32 = self.call("getBurnTime", &[], &[])?.0;
if raw == 0 {
Ok(None)
} else {
Ok(Some(Duration::from_millis(raw as u64 * 50)))
}
}
pub fn get_cook_time(&self) -> Result<Option<Duration>, HlapiClientError> {
let raw: u32 = self.call("getCookTime", &[], &[])?.0;
if raw == 0 {
Ok(None)
} else {
Ok(Some(Duration::from_millis(raw as u64 * 50)))
}
}
pub fn get_cook_time_total(&self) -> Result<Option<Duration>, HlapiClientError> {
let raw: u32 = self.call("getCookTimeTotal", &[], &[])?.0;
if raw == 0 {
Ok(None)
} else {
Ok(Some(Duration::from_millis(raw as u64 * 50)))
}
}
pub fn is_burning(&self) -> Result<bool, HlapiClientError> {
Ok(self.call("isBurning", &[], &[])?.0)
}
}
impl DeviceBase for Furnace {
const TYPE: &'static str = "furnace";
type Event = Infallible;
fn new(client: HlapiClient, uuid: Uuid) -> Result<Self, HlapiClientError> {
Ok(Self { client, uuid })
}
fn uuid_base(&self) -> Uuid {
self.uuid
}
fn client(&self) -> &HlapiClient {
&self.client
}
}