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