Documentation
use std::time::Instant;

use closure_study::thing::Cacher;

fn main() {
    let start = Instant::now();
    println!("=================================");
    let mut c = Cacher::new(|a| a * a);
    let _v = c.obtain_or_calculate(1);
    let _v2 = c.obtain_or_calculate(2);
    let _v4 = c.obtain_or_calculate(2);
    let _v5 = c.obtain_or_calculate(4);
    let _v6 = c.obtain_or_calculate(4);
    c.value.iter().for_each(|(k, v)| println!("{}=>{}", k, v));
    println!("=================================");
    let mut d = Cacher::new(|a| format!("Hi {}", a));
    d.obtain_or_calculate("稣+0");
    d.obtain_or_calculate("沁伸甚");
    d.obtain_or_calculate("沁伸甚");
    d.value.iter().for_each(|(k, v)| println!("{}=>{}", k, v));
    println!("Time elapsed in app is: {:?}", start.elapsed());
}