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()
    }
}