summaryrefslogtreecommitdiff
path: root/functional/src
diff options
context:
space:
mode:
Diffstat (limited to 'functional/src')
-rw-r--r--functional/src/main.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/functional/src/main.rs b/functional/src/main.rs
new file mode 100644
index 0000000..4fbc447
--- /dev/null
+++ b/functional/src/main.rs
@@ -0,0 +1,50 @@
+use std::thread;
+use std::time::Duration;
+
+struct Cacher<T>
+ where T: Fn(u32) -> u32
+{
+ calculation: T,
+ value: Option<u32>,
+}
+
+fn main() {
+ let simulated_user_specified_value = 10;
+ let simulated_random_number = 7;
+
+ generate_workout(
+ simulated_user_specified_value,
+ simulated_random_number
+ );
+}
+
+fn generate_workout(intensity: u32, random_number: u32) {
+ let expensive_closure = |num| {
+ println!("calculating slowly...");
+ thread::sleep(Duration::from_secs(2));
+ num
+ };
+
+ if intensity < 25 {
+ println!(
+ "Today, do {} pushups!",
+ expensive_closure(intensity)
+ );
+ println!(
+ "Next, do {} situps!",
+ expensive_closure(intensity)
+ );
+ }
+ else {
+ if random_number == 3 {
+ println!("Take a break today! Remember to stay hydrated!");
+ }
+ else {
+ println!(
+ "Today, run for {} minutes!",
+ expensive_closure(intensity)
+ );
+ }
+ }
+}
+