use std::convert::Infallible;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::client::{DeviceBase, HlapiClient, HlapiClientError};
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[serde(rename_all = "camelCase")]
pub enum ComparatorMode {
Compare,
Subtract,
}
#[derive(Debug, Clone)]
pub struct Comparator {
client: HlapiClient,
uuid: Uuid,
}
impl Comparator {
pub fn get_mode(&self) -> Result<ComparatorMode, HlapiClientError> {
Ok(self.call("getMode", &[], &[])?.0)
}
pub fn get_output_signal(&self) -> Result<u8, HlapiClientError> {
Ok(self.call("getOutputSignal", &[], &[])?.0)
}
pub fn set_mode(&self, mode: ComparatorMode) -> Result<(), HlapiClientError> {
self.call::<()>("setMode", &[&mode as _], &[])?;
Ok(())
}
}
impl DeviceBase for Comparator {
const TYPE: &'static str = "comparator";
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
}
}