40 lines
835 B
Rust
40 lines
835 B
Rust
pub use gpio::GpioDriver;
|
|
pub use null::NullDriver;
|
|
pub use piface::PiFaceDriver;
|
|
use serde::{Deserialize, Deserializer};
|
|
|
|
use crate::errors::EmgauwaControllerError;
|
|
|
|
mod gpio;
|
|
mod null;
|
|
mod piface;
|
|
|
|
pub trait RelayDriver {
|
|
fn get_high(&self, value: bool) -> bool {
|
|
value ^ self.get_inverted()
|
|
}
|
|
|
|
fn set(&mut self, value: bool) -> Result<(), EmgauwaControllerError>;
|
|
fn get_inverted(&self) -> bool;
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub enum Driver {
|
|
Null,
|
|
Gpio,
|
|
PiFace,
|
|
}
|
|
|
|
impl<'de> Deserialize<'de> for Driver {
|
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
match String::deserialize(deserializer)?.as_str() {
|
|
"null" => Ok(Driver::Null),
|
|
"gpio" => Ok(Driver::Gpio),
|
|
"piface" => Ok(Driver::PiFace),
|
|
_ => Err(serde::de::Error::custom("invalid driver")),
|
|
}
|
|
}
|
|
}
|