Skip to content

Commit d176404

Browse files
authored
refac(subscriber): remove futures dependency #460)
I noticed that `console-subscriber` was my only dependency pulling in the `futures` top-level library so I decided to try my hand at removing that dependency. This still relies on `futures-task` for an optimized `NoopWaker`
1 parent 9c18c4f commit d176404

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

Cargo.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

console-subscriber/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ tonic = { version = "0.9", features = ["transport"] }
4040
tracing-core = "0.1.24"
4141
tracing = "0.1.26"
4242
tracing-subscriber = { version = "0.3.11", default-features = false, features = ["fmt", "registry"] }
43-
futures = { version = "0.3", default-features = false }
43+
futures-task = { version = "0.3", default-features = false }
4444
hdrhistogram = { version = "7.3.0", default-features = false, features = ["serialization"] }
4545
# The parking_lot dependency is renamed, because we want our `parking_lot`
4646
# feature to also enable `tracing-subscriber`'s parking_lot feature flag.

console-subscriber/src/aggregator/mod.rs

+11-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use console_api as proto;
77
use proto::resources::resource;
88
use tokio::sync::{mpsc, Notify};
99

10-
use futures::FutureExt;
1110
use std::{
1211
sync::{
1312
atomic::{AtomicBool, Ordering::*},
@@ -221,7 +220,7 @@ impl Aggregator {
221220
// to be woken when the flush interval has elapsed, or when the
222221
// channel is almost full.
223222
let mut drained = false;
224-
while let Some(event) = self.events.recv().now_or_never() {
223+
while let Some(event) = recv_now_or_never(&mut self.events) {
225224
match event {
226225
Some(event) => {
227226
self.update_state(event);
@@ -500,6 +499,16 @@ impl Aggregator {
500499
}
501500
}
502501

502+
fn recv_now_or_never<T>(receiver: &mut mpsc::Receiver<T>) -> Option<Option<T>> {
503+
let waker = futures_task::noop_waker();
504+
let mut cx = std::task::Context::from_waker(&waker);
505+
506+
match receiver.poll_recv(&mut cx) {
507+
std::task::Poll::Ready(opt) => Some(opt),
508+
std::task::Poll::Pending => None,
509+
}
510+
}
511+
503512
// ==== impl Flush ===
504513

505514
impl Flush {

0 commit comments

Comments
 (0)