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}