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
use std::process::exit;

pub trait Rust<T, F> {
	fn rust(self, F) -> T;
}

impl<T, E, F> Rust<T, F> for Result<T, E>
	where E: ::std::error::Error,
		  F: Fn(E) -> ()
{
	fn rust(self, f: F) -> T {
		match self {
			Ok(s) => s,
			Err(e) => { f(e); exit(-1) }
		}
	}
}

impl<T, F> Rust<T, F> for Option<T> 
	where F: Fn() -> ()
{
	fn rust(self, f: F) -> T {
		match self {
			Some(s) => s,
			None => { f(); exit(-1) }
		}
	}
} 

pub fn e<T: ::std::fmt::Display>(e: T) { println!("doesn't rust: {}", e); }