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}