token_generator/
lib.rs

1extern crate limited_table;
2
3use std::convert::Into;
4
5use limited_table::{Key, LimitedTable};
6
7pub type Token = Key;
8
9pub struct TokenGenerator {
10    limited: LimitedTable<()>,
11}
12
13impl TokenGenerator {
14    pub fn new<T: Into<Token>>(begin: T, limit: usize) -> Self {
15        Self {
16            limited: LimitedTable::new(begin.into(), limit),
17        }
18    }
19
20    pub fn is_assigned(&self, token: Token) -> bool {
21        self.limited.contains(token)
22    }
23
24    pub fn gen(&mut self) -> Option<Token> {
25        self.limited.insert(())
26    }
27
28    pub fn restore(&mut self, token: Token) -> bool {
29        self.limited.remove(token).is_some()
30    }
31}