view examples/full_featured.rs @ 96:528ce50ec228

Applied comments by @dermesser
author blyxyas <blyxyas@gmail.com>
date Sun, 15 Jan 2023 13:15:04 +0100
parents 7d8d8525f957
children
line wrap: on
line source

use memoize::memoize;
use std::thread;
use std::time::{Duration, Instant};

#[allow(dead_code)]
#[derive(Debug, Clone)]
struct ComplexStruct {
    s: String,
    b: bool,
    i: Instant,
}

#[cfg(feature = "full")]
#[memoize(TimeToLive: Duration::from_secs(2), Capacity: 123)]
fn hello(key: String) -> ComplexStruct {
    println!("hello: {}", key);
    ComplexStruct {
        s: key,
        b: false,
        i: Instant::now(),
    }
}

fn main() {
    #[cfg(feature = "full")]
    {
        println!("result: {:?}", hello("ABC".to_string()));
        println!("result: {:?}", hello("DEF".to_string()));
        println!("result: {:?}", hello("ABC".to_string())); // Same as first
        thread::sleep(core::time::Duration::from_millis(2100));
        println!("result: {:?}", hello("ABC".to_string()));
        println!("result: {:?}", hello("DEF".to_string()));
        println!("result: {:?}", hello("ABC".to_string())); // Same as first
        memoized_flush_hello();
        println!("result: {:?}", hello("EFG".to_string()));
        println!("result: {:?}", hello("ABC".to_string())); // Refreshed
        println!("result: {:?}", hello("EFG".to_string())); // Same as first
        println!("result: {:?}", hello("ABC".to_string())); // Same as refreshed
        println!("result: {:?}", memoized_original_hello("ABC".to_string()));
    }
}