From d432378a3cc5cd67fc29c0b15b96b886c1323554 Mon Sep 17 00:00:00 2001 From: Age Manning Date: Tue, 28 Apr 2020 14:10:58 +1000 Subject: [PATCH] Update hashmap hashset to stable futures --- Cargo.lock | 70 +++++++++---------- eth2/utils/hashmap_delay/Cargo.toml | 4 +- eth2/utils/hashmap_delay/src/hashmap_delay.rs | 43 ++++++------ eth2/utils/hashmap_delay/src/hashset_delay.rs | 42 +++++------ 4 files changed, 81 insertions(+), 78 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6e2dbebbb8..2565a240d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -221,7 +221,6 @@ dependencies = [ "genesis 0.2.0", "integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lighthouse_bootstrap 0.2.0", "lighthouse_metrics 0.2.0", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "lru 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -265,16 +264,17 @@ dependencies = [ "exit-future 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "genesis 0.2.0", - "lighthouse_bootstrap 0.2.0", "logging 0.2.0", "node_test_rig 0.2.0", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", "slog 2.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "slog-term 2.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "store 0.2.0", "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "types 0.2.0", "version 0.2.0", ] @@ -530,7 +530,6 @@ dependencies = [ "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "genesis 0.2.0", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lighthouse_bootstrap 0.2.0", "lighthouse_metrics 0.2.0", "network 0.2.0", "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -889,7 +888,7 @@ name = "deposit_contract" version = "0.2.0" dependencies = [ "eth2_ssz 0.1.2", - "ethabi 9.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ethabi 11.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", "tree_hash 0.1.1", @@ -1056,9 +1055,12 @@ dependencies = [ name = "environment" version = "0.2.0" dependencies = [ + "beacon_node 0.2.0", + "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "ctrlc 3.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "eth2_config 0.2.0", + "eth2_testnet_config 0.2.0", "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "logging 0.2.0", "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1102,7 +1104,7 @@ dependencies = [ "slog 2.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "sloggers 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "state_processing 0.2.0", - "tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "tree_hash 0.1.1", "types 0.2.0", @@ -1116,7 +1118,7 @@ dependencies = [ "deposit_contract 0.2.0", "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", "types 0.2.0", "web3 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1133,6 +1135,7 @@ dependencies = [ "eth2_ssz_types 0.2.0", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "hashmap_delay 0.2.0", "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p 0.13.2 (git+https://github.com/SigP/rust-libp2p?rev=4e3003d5283040fee10da1299252dd060a838d97)", @@ -1147,6 +1150,7 @@ dependencies = [ "slog-stdlog 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "slog-term 2.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "snap 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io-timeout 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1251,16 +1255,15 @@ dependencies = [ [[package]] name = "ethabi" -version = "9.0.1" +version = "11.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-keccak 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "uint 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1558,7 +1561,7 @@ dependencies = [ "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", "slog 2.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "state_processing 0.2.0", - "tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", "tree_hash 0.1.1", "types 0.2.0", ] @@ -1624,7 +1627,7 @@ dependencies = [ "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1646,8 +1649,8 @@ dependencies = [ name = "hashmap_delay" version = "0.2.0" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1830,7 +1833,7 @@ dependencies = [ "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1855,7 +1858,7 @@ dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2021,6 +2024,7 @@ name = "lcli" version = "0.2.0" dependencies = [ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", + "deposit_contract 0.2.0", "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "environment 0.2.0", "eth1_test_rig 0.2.0", @@ -2035,7 +2039,8 @@ dependencies = [ "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", "simple_logger 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "state_processing 0.2.0", - "tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", + "tree_hash 0.1.1", "types 0.2.0", "web3 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2548,19 +2553,6 @@ dependencies = [ "validator_client 0.2.0", ] -[[package]] -name = "lighthouse_bootstrap" -version = "0.2.0" -dependencies = [ - "eth2-libp2p 0.2.0", - "eth2_config 0.2.0", - "reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "types 0.2.0", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "lighthouse_metrics" version = "0.2.0" @@ -3685,7 +3677,7 @@ dependencies = [ "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3743,6 +3735,7 @@ dependencies = [ "eth2_ssz_derive 0.1.0", "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "state_processing 0.2.0", "tree_hash 0.1.1", "types 0.2.0", ] @@ -4202,6 +4195,11 @@ name = "smallvec" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "snap" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "snow" version = "0.6.2" @@ -4540,7 +4538,7 @@ dependencies = [ [[package]] name = "tokio" -version = "0.2.12" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4774,7 +4772,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -4834,7 +4832,7 @@ dependencies = [ "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -5099,7 +5097,6 @@ dependencies = [ "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "lighthouse_bootstrap 0.2.0", "logging 0.2.0", "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -5638,8 +5635,8 @@ dependencies = [ "checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" "checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" "checksum error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9" +"checksum ethabi 11.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97652a7d1f2504d6c885c87e242a06ccef5bd3054093d3fb742d8fb64806231a" "checksum ethabi 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ebdeeea85a6d217b9fcc862906d7e283c047e04114165c433756baf5dce00a6c" -"checksum ethabi 9.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "965126c64662832991f5a748893577630b558e47fa94e7f35aefcd20d737cef7" "checksum ethbloom 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3932e82d64d347a045208924002930dc105a138995ccdc1479d0f05f0359f17c" "checksum ethbloom 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "32cfe1c169414b709cf28aa30c74060bdb830a03a8ba473314d079ac79d80a5f" "checksum ethereum-types 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62d1bc682337e2c5ec98930853674dd2b4bd5d0d246933a9e98e5280f7c76c5f" @@ -5899,6 +5896,7 @@ dependencies = [ "checksum sloggers 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d41aa58f9a02e205e21117ffa08e94c37f06e1f1009be2639b621f351a75796d" "checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" "checksum smallvec 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc" +"checksum snap 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f7fb9b0bb877b35a1cc1474a3b43d9c226a2625311760cdda2cbccbc0c7a8376" "checksum snow 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "afb767eee7d257ba202f0b9b08673bc13b22281632ef45267b19f13100accd2f" "checksum socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85" "checksum soketto 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bceb1a3a15232d013d9a3b7cac9e5ce8e2313f348f01d4bc1097e5e53aa07095" @@ -5928,7 +5926,7 @@ dependencies = [ "checksum tiny-keccak 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d8a021c69bb74a44ccedb824a046447e2c84a01df9e5c20779750acb38e11b2" "checksum tinytemplate 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "57a3c6667d3e65eb1bc3aed6fd14011c6cbc3a0665218ab7f5daf040b9ec371a" "checksum tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -"checksum tokio 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "b34bee1facdc352fba10c9c58b654e6ecb6a2250167772bf86071f7c5f2f5061" +"checksum tokio 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)" = "7d9c43f1bb96970e153bcbae39a65e249ccb942bd9d36dbdf086024920417c9c" "checksum tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" "checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" "checksum tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "aeeffbbb94209023feaef3c196a41cbcdafa06b4a6f893f68779bb5e53796f71" diff --git a/eth2/utils/hashmap_delay/Cargo.toml b/eth2/utils/hashmap_delay/Cargo.toml index 918a8568f4..da1536a3c4 100644 --- a/eth2/utils/hashmap_delay/Cargo.toml +++ b/eth2/utils/hashmap_delay/Cargo.toml @@ -5,5 +5,5 @@ authors = ["Age Manning "] edition = "2018" [dependencies] -tokio-timer = "0.2.12" -futures = "0.1.29" +futures = "0.3.4" +tokio = { version = "0.2.19", features = ["time"] } diff --git a/eth2/utils/hashmap_delay/src/hashmap_delay.rs b/eth2/utils/hashmap_delay/src/hashmap_delay.rs index ea4fa14574..326cf31d80 100644 --- a/eth2/utils/hashmap_delay/src/hashmap_delay.rs +++ b/eth2/utils/hashmap_delay/src/hashmap_delay.rs @@ -8,13 +8,17 @@ const DEFAULT_DELAY: u64 = 30; use futures::prelude::*; -use std::collections::HashMap; -use std::time::Duration; -use tokio_timer::delay_queue::{self, DelayQueue}; +use std::{ + collections::HashMap, + pin::Pin, + task::{Context, Poll}, + time::Duration, +}; +use tokio::time::delay_queue::{self, DelayQueue}; pub struct HashMapDelay where - K: std::cmp::Eq + std::hash::Hash + std::clone::Clone, + K: std::cmp::Eq + std::hash::Hash + std::clone::Clone + Unpin, { /// The given entries. entries: HashMap>, @@ -34,7 +38,7 @@ struct MapEntry { impl Default for HashMapDelay where - K: std::cmp::Eq + std::hash::Hash + std::clone::Clone, + K: std::cmp::Eq + std::hash::Hash + std::clone::Clone + Unpin, { fn default() -> Self { HashMapDelay::new(Duration::from_secs(DEFAULT_DELAY)) @@ -43,7 +47,7 @@ where impl HashMapDelay where - K: std::cmp::Eq + std::hash::Hash + std::clone::Clone, + K: std::cmp::Eq + std::hash::Hash + std::clone::Clone + Unpin, { /// Creates a new instance of `HashMapDelay`. pub fn new(default_entry_timeout: Duration) -> Self { @@ -139,23 +143,22 @@ where impl Stream for HashMapDelay where - K: std::cmp::Eq + std::hash::Hash + std::clone::Clone, + K: std::cmp::Eq + std::hash::Hash + std::clone::Clone + Unpin, + V: Unpin, { - type Item = (K, V); - type Error = &'static str; + type Item = Result<(K, V), String>; - fn poll(&mut self) -> Poll, Self::Error> { - match self.expirations.poll() { - Ok(Async::Ready(Some(key))) => { - let key = key.into_inner(); - match self.entries.remove(&key) { - Some(entry) => Ok(Async::Ready(Some((key, entry.value)))), - None => Err("Value no longer exists in expirations"), - } + fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll> { + match self.expirations.poll_expired(cx) { + Poll::Ready(Some(Ok(key))) => match self.entries.remove(key.get_ref()) { + Some(entry) => Poll::Ready(Some(Ok((key.into_inner(), entry.value)))), + None => Poll::Ready(Some(Err("Value no longer exists in expirations".into()))), + }, + Poll::Ready(Some(Err(e))) => { + Poll::Ready(Some(Err(format!("delay queue error: {:?}", e)))) } - Ok(Async::Ready(None)) => Ok(Async::Ready(None)), - Ok(Async::NotReady) => Ok(Async::NotReady), - Err(_) => Err("Error polling HashMapDelay"), + Poll::Ready(None) => Poll::Ready(None), + Poll::Pending => Poll::Pending, } } } diff --git a/eth2/utils/hashmap_delay/src/hashset_delay.rs b/eth2/utils/hashmap_delay/src/hashset_delay.rs index bd93d6c8e7..756af9c86e 100644 --- a/eth2/utils/hashmap_delay/src/hashset_delay.rs +++ b/eth2/utils/hashmap_delay/src/hashset_delay.rs @@ -6,13 +6,17 @@ const DEFAULT_DELAY: u64 = 30; use futures::prelude::*; -use std::collections::HashMap; -use std::time::{Duration, Instant}; -use tokio_timer::delay_queue::{self, DelayQueue}; +use std::{ + collections::HashMap, + pin::Pin, + task::{Context, Poll}, + time::{Duration, Instant}, +}; +use tokio::time::delay_queue::{self, DelayQueue}; pub struct HashSetDelay where - K: std::cmp::Eq + std::hash::Hash + std::clone::Clone, + K: std::cmp::Eq + std::hash::Hash + std::clone::Clone + Unpin, { /// The given entries. entries: HashMap, @@ -32,7 +36,7 @@ struct MapEntry { impl Default for HashSetDelay where - K: std::cmp::Eq + std::hash::Hash + std::clone::Clone, + K: std::cmp::Eq + std::hash::Hash + std::clone::Clone + Unpin, { fn default() -> Self { HashSetDelay::new(Duration::from_secs(DEFAULT_DELAY)) @@ -41,7 +45,7 @@ where impl HashSetDelay where - K: std::cmp::Eq + std::hash::Hash + std::clone::Clone, + K: std::cmp::Eq + std::hash::Hash + std::clone::Clone + Unpin, { /// Creates a new instance of `HashSetDelay`. pub fn new(default_entry_timeout: Duration) -> Self { @@ -141,23 +145,21 @@ where impl Stream for HashSetDelay where - K: std::cmp::Eq + std::hash::Hash + std::clone::Clone, + K: std::cmp::Eq + std::hash::Hash + std::clone::Clone + Unpin, { - type Item = K; - type Error = &'static str; + type Item = Result; - fn poll(&mut self) -> Poll, Self::Error> { - match self.expirations.poll() { - Ok(Async::Ready(Some(key))) => { - let key = key.into_inner(); - match self.entries.remove(&key) { - Some(_) => Ok(Async::Ready(Some(key))), - None => Err("Value no longer exists in expirations"), - } + fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll> { + match self.expirations.poll_expired(cx) { + Poll::Ready(Some(Ok(key))) => match self.entries.remove(key.get_ref()) { + Some(_) => Poll::Ready(Some(Ok(key.into_inner()))), + None => Poll::Ready(Some(Err("Value no longer exists in expirations".into()))), + }, + Poll::Ready(Some(Err(e))) => { + Poll::Ready(Some(Err(format!("delay queue error: {:?}", e)))) } - Ok(Async::Ready(None)) => Ok(Async::Ready(None)), - Ok(Async::NotReady) => Ok(Async::NotReady), - Err(_) => Err("Error polling HashSetDelay"), + Poll::Ready(None) => Poll::Ready(None), + Poll::Pending => Poll::Pending, } } }