@@ -37,16 +37,25 @@ pub trait SmartLedsWrite {
37
37
}
38
38
39
39
pub mod asynch {
40
- use core:: future:: Future ;
41
-
42
40
/// An async trait that Smart Led Drivers implement
43
41
///
44
42
/// The amount of time each iteration of `iterator` might take is undefined.
45
43
/// Drivers, where this might lead to issues, aren't expected to work in all cases.
46
44
pub trait SmartLedsWriteAsync {
47
45
type Error ;
48
46
type Color ;
49
- fn write < T , I > ( & mut self , iterator : T ) -> impl Future < Output = Result < ( ) , Self :: Error > >
47
+ // The async_fn_in_trait warning doesn't really matter for embedded cases because
48
+ // no_std async executors don't require futures to be Send. Also, embedded-hal-async
49
+ // does not have Send bounds in its traits, so the HAL functions called in
50
+ // implementations of this trait wouldn't return Send futures anyway. It's
51
+ // questionable if it would be desirable for embedded HALs to return a Send future
52
+ // for the write function for a peripheral because you probably don't want to
53
+ // write data to the same peripheral from multiple threads simultaneously and have
54
+ // the data get interleaved, nor have the embedded HAL implement a synchronization
55
+ // mechanism with a run time cost to avoid that.
56
+ // https://github.com/rust-embedded/embedded-hal/pull/515#issuecomment-1763525962
57
+ #[ allow( async_fn_in_trait) ]
58
+ async fn write < T , I > ( & mut self , iterator : T ) -> Result < ( ) , Self :: Error >
50
59
where
51
60
T : IntoIterator < Item = I > ,
52
61
I : Into < Self :: Color > ;
0 commit comments