altaway 0.3.5

Simple code, nothing more
Documentation
pub struct Scanner {
	handle: std::io::Stdin,
	buffer: std::collections::VecDeque<String>
}

impl Scanner {
	/// Buffered input, one variable at a time.
	/// 
	/// # Example
	/// ```
	/// let mut scanner = Scanner::new();
	/// let x: i32 = scanner.next().unwrap();
	/// println!("{}", x);
	/// let y: String = scanner.next().unwrap();
	/// println!("{}", y);
	/// ```
	pub fn next<T: std::str::FromStr>(&mut self) -> Result<T, T::Err> {
		'populate_buffer: loop {
			if self.buffer.len() > 0 {
				break 'populate_buffer;
			}
			let mut available = String::new();
			self.handle.read_line(&mut available).unwrap();
			self.buffer = available.split_whitespace().map(String::from).collect();
		}
		T::from_str(&self.buffer.pop_front().unwrap())
	}
}

impl Default for Scanner {
	fn default() -> Self {
		Scanner {
			handle: std::io::stdin(),
			buffer: std::collections::VecDeque::new()
		}		
	}
}

/// In the debug mode, acts like std::dbg.
/// In the release mode, does nothing.
/// 
/// # Example
/// ```
/// dbg!(x, y, z);
/// ```
#[macro_export]
macro_rules! dbg {
	($($x:tt)*) => {
		#[cfg(debug_assertions)] std::dbg!($($x)*)
	}
}