feat: make the input_number attributes and signal support any numeric type
This commit is contained in:
@@ -4,12 +4,12 @@ use super::InputNumberMode;
|
||||
|
||||
#[derive(Debug, FromPyObject)]
|
||||
#[pyo3(from_item_all)]
|
||||
pub struct InputNumberAttributes {
|
||||
initial: Option<f64>,
|
||||
pub struct InputNumberAttributes<Numeric> {
|
||||
initial: Option<Numeric>,
|
||||
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<String>,
|
||||
|
||||
@@ -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,25 +32,29 @@ 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<Option<Arc<Result<HomeAssistantState<f64>, StateObjectSignalError<Arc<PyErr>>>>>>,
|
||||
Signal<
|
||||
Option<Arc<Result<HomeAssistantState<Numeric>, StateObjectSignalError<Arc<PyErr>>>>>,
|
||||
>,
|
||||
impl Future<Output = Result<(), emitter_and_signal::signal::JoinError>>,
|
||||
),
|
||||
CreateSignalError,
|
||||
> {
|
||||
let entity_id = EntityId(Domain::InputNumber, object_id);
|
||||
|
||||
let (signal, task1) =
|
||||
StateObject::<HomeAssistantState<f64>, InputNumberAttributes, Py<PyAny>>::signal(
|
||||
py,
|
||||
home_assistant,
|
||||
entity_id,
|
||||
)
|
||||
let (signal, task1) = StateObject::<
|
||||
HomeAssistantState<Numeric>,
|
||||
InputNumberAttributes<Numeric>,
|
||||
Py<PyAny>,
|
||||
>::signal(py, home_assistant, entity_id)
|
||||
.context(StateObjectSignalSnafu)?;
|
||||
|
||||
let (signal, task2) = signal
|
||||
|
||||
Reference in New Issue
Block a user