use std::env;
use std::process;
use std::thread;
use std::time::Duration;
use minigrep_dqy::Config;
struct Cacher<T>
where T: Fn(i32) -> i32 {
calculation: T,
value: Option<i32>,
}
impl<T> Cacher<T> where T: Fn(i32) -> i32 {
fn new(calculation: T) -> Cacher<T> {
Cacher {
calculation,
value: None
}
}
fn value(&mut self, arg: i32) -> i32 {
match self.value {
Some(v) => v,
None => {
let v = (self.calculation)(arg);
self.value = Some(v);
v
}
}
}
}
fn main() {
let config = Config::new(env::args()).unwrap_or_else(|err| {
eprintln!("Problem parsing arguments: {}", err);
process::exit(1);
});
if let Err(e) = minigrep_dqy::run(config) {
eprintln!("Application error: {}", e);
process::exit(1);
}
let expensive_closure = |num: i32| {
println!("Calculating slowly...");
thread::sleep(Duration::from_secs(2));
num
};
let fun = |x: String| x;
}