diff --git a/home-assistant/src/input_number/attributes.rs b/home-assistant/src/input_number/attributes.rs index 5eefdf6..c1fe40d 100644 --- a/home-assistant/src/input_number/attributes.rs +++ b/home-assistant/src/input_number/attributes.rs @@ -4,12 +4,12 @@ use super::InputNumberMode; #[derive(Debug, FromPyObject)] #[pyo3(from_item_all)] -pub struct InputNumberAttributes { - initial: Option, +pub struct InputNumberAttributes { + initial: Option, editable: bool, - min: f64, - max: f64, - step: f64, + min: Numeric, + max: Numeric, + step: Numeric, mode: InputNumberMode, // todo: CustomUnitOfMeasurement type? probably not? unit_of_measurement: Option, diff --git a/home-assistant/src/input_number/mod.rs b/home-assistant/src/input_number/mod.rs index a85fea9..5fd3c0f 100644 --- a/home-assistant/src/input_number/mod.rs +++ b/home-assistant/src/input_number/mod.rs @@ -1,7 +1,7 @@ -use std::{future::Future, sync::Arc}; +use std::{future::Future, str::FromStr, sync::Arc}; use emitter_and_signal::{Signal, SignalExt}; -use pyo3::{Py, PyAny, PyErr, Python}; +use pyo3::{FromPyObject, Py, PyAny, PyErr, Python}; use snafu::{ResultExt, Snafu}; use crate::{ @@ -32,26 +32,30 @@ pub enum CreateSignalError { }, } -pub fn signal<'py>( +pub fn signal< + 'py, + Numeric: 'static + uom::num::Num + Clone + Send + Sync + FromStr + for<'a, 'py2> FromPyObject<'a, 'py2>, +>( py: Python<'py>, home_assistant: &'py HomeAssistant, object_id: ObjectId, ) -> Result< ( - Signal, StateObjectSignalError>>>>>, + Signal< + Option, StateObjectSignalError>>>>, + >, impl Future>, ), CreateSignalError, > { let entity_id = EntityId(Domain::InputNumber, object_id); - let (signal, task1) = - StateObject::, InputNumberAttributes, Py>::signal( - py, - home_assistant, - entity_id, - ) - .context(StateObjectSignalSnafu)?; + let (signal, task1) = StateObject::< + HomeAssistantState, + InputNumberAttributes, + Py, + >::signal(py, home_assistant, entity_id) + .context(StateObjectSignalSnafu)?; let (signal, task2) = signal .map(|state_object_arc_result_option| {