mai/
token_bucket.rs

1use mio::Token;
2use slab::Index;
3
4pub struct TokenBucket {
5  free_tokens: Vec<usize>
6}
7
8impl TokenBucket {
9  pub fn new() -> TokenBucket {
10    TokenBucket {
11      free_tokens: Vec::new()
12    }
13  }
14
15  pub fn get(&mut self) -> Option<Token> {
16    self.free_tokens.pop().map(|usize_token| Index::from_usize(usize_token))
17  }
18
19  pub fn put(&mut self, token: Token) {
20    self.free_tokens.push(token.as_usize());
21  }
22}