chore(protocol): address async fn in extension traits

This commit is contained in:
J / Jacob Babich
2026-07-12 19:34:25 -04:00
parent 044243ae3c
commit 53a2fc2a35
4 changed files with 13 additions and 9 deletions

1
Cargo.lock generated
View File

@@ -1758,6 +1758,7 @@ dependencies = [
"deranged", "deranged",
"derive_more", "derive_more",
"ext-trait", "ext-trait",
"futures",
"palette", "palette",
"serde", "serde",
"snafu", "snafu",

View File

@@ -27,6 +27,7 @@ chrono-tz = "0.10.4"
deranged = "0.5" deranged = "0.5"
derive_more = "2.1.0" derive_more = "2.1.0"
ext-trait = "2.0.1" ext-trait = "2.0.1"
futures = "0.3.32"
mitsein = "0.9" mitsein = "0.9"
palette = "0.7" palette = "0.7"
proc-macro2 = "1.0.106" proc-macro2 = "1.0.106"

View File

@@ -12,6 +12,7 @@ serde = ["dep:serde"]
deranged = { workspace = true } deranged = { workspace = true }
derive_more = { workspace = true } derive_more = { workspace = true }
ext-trait = { workspace = true } ext-trait = { workspace = true }
futures = { workspace = true }
palette = { workspace = true } palette = { workspace = true }
snafu = { workspace = true } snafu = { workspace = true }
strum = { workspace = true, features = ["derive"] } strum = { workspace = true, features = ["derive"] }

View File

@@ -1,7 +1,8 @@
use std::{error::Error, future::Future}; use std::{error::Error, future::Future};
use deranged::RangedU16; use deranged::RangedU16;
use snafu::{ResultExt, Snafu}; use futures::TryFutureExt as _;
use snafu::{ResultExt as _, Snafu};
#[derive( #[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, strum::Display, strum::EnumIs, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, strum::Display, strum::EnumIs,
@@ -44,15 +45,15 @@ pub trait GetState {
#[ext_trait::extension(pub trait IsOff)] #[ext_trait::extension(pub trait IsOff)]
impl<T: GetState> T { impl<T: GetState> T {
async fn is_off(&self) -> Result<bool, T::Error> { fn is_off(&self) -> impl Future<Output = Result<bool, T::Error>> + Send {
Ok(self.get_state().await?.is_off()) self.get_state().map_ok(|state| state.is_off())
} }
} }
#[ext_trait::extension(pub trait IsOn)] #[ext_trait::extension(pub trait IsOn)]
impl<T: GetState> T { impl<T: GetState> T {
async fn is_on(&self) -> Result<bool, T::Error> { fn is_on(&self) -> impl Future<Output = Result<bool, T::Error>> + Send {
Ok(self.get_state().await?.is_on()) self.get_state().map_ok(|state| state.is_on())
} }
} }
@@ -63,15 +64,15 @@ pub trait SetState {
#[ext_trait::extension(pub trait TurnOff)] #[ext_trait::extension(pub trait TurnOff)]
impl<T: SetState> T { impl<T: SetState> T {
async fn turn_off(&mut self) -> Result<(), T::Error> { fn turn_off(&mut self) -> impl Future<Output = Result<(), T::Error>> + Send {
self.set_state(State::Off).await self.set_state(State::Off)
} }
} }
#[ext_trait::extension(pub trait TurnOn)] #[ext_trait::extension(pub trait TurnOn)]
impl<T: SetState> T { impl<T: SetState> T {
async fn turn_on(&mut self) -> Result<(), T::Error> { fn turn_on(&mut self) -> impl Future<Output = Result<(), T::Error>> + Send {
self.set_state(State::On).await self.set_state(State::On)
} }
} }