Skip to content

Commit 47f7501

Browse files
committed
add support for async-std
1 parent bd3a250 commit 47f7501

File tree

3 files changed

+40
-11
lines changed

3 files changed

+40
-11
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
/target
22
/Cargo.lock
3-
*.idea/
3+
*.idea/
4+
.vscode

Cargo.toml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,28 @@ readme = "./README.md"
1414
[dependencies]
1515
anyhow = "1.0.75"
1616
bincode = "1.3.3"
17+
cfg-if = "1.0.0"
1718
futures = "0.3.29"
1819
lazy_static = "1.4.0"
1920
tokio-test = "0.4.3"
2021

22+
[dependencies.async-std]
23+
version = "1.12.0"
24+
optional = true
25+
26+
features = ["alloc"]
2127
[dependencies.serde]
2228
version = "1.0.190"
2329
features = ["derive"]
24-
2530
[dependencies.tokio]
2631
version = "1.33.0"
27-
features = ["full"]
32+
features = ["rt", "macros", "rt-multi-thread"]
33+
optional = true
2834

2935
[dependencies.uuid]
3036
version = "1.5.0"
3137
features = ["v4"]
38+
39+
[features]
40+
use-async-std = ["async-std"]
41+
default = ["tokio"]

src/lib.rs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,9 @@
113113
License: MIT
114114
*/
115115

116+
use futures::future::{BoxFuture, Future, FutureExt};
116117
use serde::{Deserialize, Serialize};
117118
use std::{collections::HashMap, sync::Arc};
118-
use tokio::task::{self};
119-
120-
use futures::future::{BoxFuture, Future, FutureExt};
121119
use uuid::Uuid;
122120

123121
pub type AsyncCB = dyn Fn(Vec<u8>) -> BoxFuture<'static, ()> + Send + Sync + 'static;
@@ -169,14 +167,34 @@ impl AsyncEventEmitter {
169167

170168
match listener.limit {
171169
None => {
172-
callback_handlers.push(task::spawn(async move {
173-
callback(bytes).await;
170+
cfg_if::cfg_if! {
171+
if #[cfg(feature = "use-async-std")] {
172+
use async_std::task::spawn;
173+
callback_handlers.push(spawn(async move {
174+
callback(bytes).await;
174175
}));
176+
} else {
177+
use tokio::spawn;
178+
callback_handlers
179+
.push(spawn(async move { callback(bytes).await }));
180+
}
181+
182+
};
175183
}
176184
Some(limit) => {
177185
if limit != 0 {
178-
callback_handlers
179-
.push(task::spawn(async move { callback(bytes).await }));
186+
cfg_if::cfg_if! {
187+
if #[cfg(feature = "use-async-std")] {
188+
callback_handlers.push(async_std::task::spawn(async move {
189+
callback(bytes).await;
190+
}));
191+
} else {
192+
callback_handlers
193+
.push(tokio::spawn(async move { callback(bytes).await }));
194+
}
195+
196+
};
197+
180198
listener.limit = Some(limit - 1);
181199
} else {
182200
listeners_to_remove.push(index);
@@ -192,7 +210,7 @@ impl AsyncEventEmitter {
192210
}
193211

194212
for handles in callback_handlers {
195-
handles.await?;
213+
handles.await;
196214
}
197215

198216
Ok(())

0 commit comments

Comments
 (0)