feat: make the input_number attributes and signal support any numeric type

This commit is contained in:
J / Jacob Babich
2026-07-15 00:52:01 -04:00
parent 8ab8dd3441
commit a2d6d9f4c2
2 changed files with 20 additions and 16 deletions

View File

@@ -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>,

View File

@@ -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<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,
)
.context(StateObjectSignalSnafu)?;
let (signal, task1) = StateObject::<
HomeAssistantState<Numeric>,
InputNumberAttributes<Numeric>,
Py<PyAny>,
>::signal(py, home_assistant, entity_id)
.context(StateObjectSignalSnafu)?;
let (signal, task2) = signal
.map(|state_object_arc_result_option| {