pub mod command_class;
pub mod serial_api;
pub mod types;
use async_trait::async_trait;
use super::BoxStream;
use super::error::HomeAutoResult;
use super::types::HomeAutoEvent;
pub use command_class::CommandClass;
pub use serial_api::ZWaveSerialController;
pub use types::{NodeId, ZWaveNode, ZWaveNodeKind};
#[async_trait]
pub trait ZWaveController: Send + Sync {
async fn start(&self) -> HomeAutoResult<()>;
async fn stop(&self) -> HomeAutoResult<()>;
async fn include_node(&self, timeout_secs: u8) -> HomeAutoResult<ZWaveNode>;
async fn exclude_node(&self, timeout_secs: u8) -> HomeAutoResult<()>;
async fn nodes(&self) -> HomeAutoResult<Vec<ZWaveNode>>;
async fn send_cc(&self, node_id: NodeId, cc: CommandClass, data: &[u8]) -> HomeAutoResult<()>;
fn events(&self) -> BoxStream<'static, HomeAutoEvent>;
}