kash 0.7.1

Function and method cache and memoization
Documentation
#![allow(clippy::arithmetic_side_effects, clippy::unwrap_used)]
use kash::kash;
use std::{
    sync::Arc,
    thread::sleep,
    time::{Duration, Instant},
};

enum MyError {
    Err,
}

#[kash]
fn slow_fn(n: u32) -> Result<String, Arc<MyError>> {
    if n == 0 {
        return Err(Arc::new(MyError::Err));
    }
    sleep(Duration::new(1, 0));
    slow_fn(n - 1)
}

#[kash(result)]
fn slow_fn_with_result_flag(n: u32) -> Result<String, MyError> {
    if n == 0 {
        return Err(MyError::Err);
    }
    sleep(Duration::new(1, 0));
    slow_fn_with_result_flag(n - 1)
}

pub fn main() {
    println!("Initial run...");
    let now = Instant::now();
    let _ = slow_fn(10);
    println!("Elapsed: {}\n", now.elapsed().as_secs());

    println!("Cached run...");
    let now = Instant::now();
    let _ = slow_fn(10);
    println!("Elapsed: {}\n", now.elapsed().as_secs());

    println!("Initial run...");
    let now = Instant::now();
    let _ = slow_fn_with_result_flag(10);
    println!("Elapsed: {}\n", now.elapsed().as_secs());

    println!("Cached run...");
    let now = Instant::now();
    let _ = slow_fn_with_result_flag(10);
    println!("Elapsed: {}\n", now.elapsed().as_secs());

    println!("done!");
}