rsubdomain 1.2.14

A high-performance subdomain brute-force tool written in Rust
Documentation
#[derive(Debug)]
pub struct Stack<T> {
    items: Vec<T>,
    pub length: usize,
}

impl<T> Stack<T> {
    pub fn new() -> Self {
        Self {
            items: Vec::new(),
            length: 0,
        }
    }

    pub fn push(&mut self, data: T) {
        self.items.push(data);
        self.length = self.items.len();
    }

    pub fn pop(&mut self) -> Option<T> {
        let value = self.items.pop();
        self.length = self.items.len();
        value
    }

    #[allow(dead_code)]
    fn len(&self) -> usize {
        self.items.len()
    }
}

impl<T> Default for Stack<T> {
    fn default() -> Self {
        Self::new()
    }
}

#[cfg(test)]
mod tests {
    use super::Stack;

    #[test]
    fn stack_preserves_lifo_order() {
        let mut stack = Stack::new();
        stack.push(1usize);
        stack.push(2usize);
        stack.push(3usize);

        assert_eq!(stack.length, 3);
        assert_eq!(stack.pop(), Some(3));
        assert_eq!(stack.pop(), Some(2));
        assert_eq!(stack.pop(), Some(1));
        assert_eq!(stack.pop(), None);
        assert_eq!(stack.length, 0);
    }
}