1 个不稳定版本
0.1.0 | 2023 年 8 月 29 日 |
---|
#4 在 #tx
35KB
423 行代码(不包括注释)
糖浆
糖浆是一个用于 Rust 的通用事件去抖动器,可以将时间上接近的事件组合成单个事件。
例如,您可能有一些模板,您希望每次模板文件更改时都重新加载这些模板。然而,如果模板文件在短时间内发生许多小更改,为每次更改重新加载模板将是浪费的;相反,可以使用去抖动器将时间上类似的变化组合成单个变化,因此模板只需要重新加载一次。
可以使用 debouncer
函数创建一个新的去抖动器,该函数返回去抖动器的两部分:tx(发送)部分和rx(接收)部分。tx 向去抖动器发送原始未去抖动的事件,rx 从去抖动器接收去抖动的事件。两部分都可以被克隆,以便允许多个发送者和接收者。
use std::{thread, time::Duration};
// Create a new debouncer which takes raw events of type `u32` and outputs
// debounced events of type `Vec<u32>`.
let (tx, rx) = treacle::debouncer::<u32, Vec<u32>, _>(
// Group events which occur in the same 500ms window.
Duration::from_millis(500),
// Combine raw events by pushing them to a vector.
|acc, raw_event| {
let mut events_vector = acc.unwrap_or_default();
events_vector.push(raw_event);
events_vector
});
thread::spawn(move || {
// Send two raw events in quick succession.
tx.send(10).unwrap();
tx.send(20).unwrap();
// Wait, then send more raw events.
thread::sleep(Duration::from_millis(500));
tx.send(30).unwrap();
tx.send(40).unwrap();
tx.send(50).unwrap();
});
assert_eq!(rx.recv().unwrap(), &[10, 20]);
assert_eq!(rx.recv().unwrap(), &[30, 40, 50]);