fedimint_core/task/
waiter.rs1use tokio::sync::Semaphore;
4
5#[derive(Debug)]
7pub struct Waiter {
8 done_semaphore: Semaphore,
9}
10
11impl Default for Waiter {
12 fn default() -> Self {
13 Self::new()
14 }
15}
16
17impl Waiter {
18 pub fn new() -> Self {
19 Self {
20 done_semaphore: Semaphore::new(0),
22 }
23 }
24
25 pub fn done(&self) {
29 self.done_semaphore.close();
31 }
32
33 pub async fn wait(&self) {
35 self.done_semaphore
37 .acquire()
38 .await
39 .expect_err("done semaphore is only closed, never has permits");
40 }
41
42 pub fn is_done(&self) -> bool {
44 self.done_semaphore.is_closed()
45 }
46}
47
48#[cfg(test)]
49mod tests;