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
32
pub use std::io::Write;

macro_rules! create_std_macros {
	($src:expr, $name:ident, $nameln:ident) => {
		#[macro_export]
		macro_rules! $name {
			($str:expr) => {
				$src.write_all($str.as_bytes()).unwrap();
				$src.flush().unwrap()
			}
		}
		#[macro_export]
		macro_rules! $nameln {
			($str:expr) => {
				let mut s = String::with_capacity($str.len() + 1);
				s.push_str($str);
				s.push('\n');
				$name!(s);
			}
		}
	}
}

create_std_macros!(std::io::stdout(), stdout, stdoutln);
create_std_macros!(std::io::stderr(), stderr, stderrln);

#[test]
fn it_works() {
	stdout!("Hello ");
	stdoutln!("World");
	stderrln!("ERROR! (not really though)");
}