transformer_once_demo/
transformer_once_demo.rs1use qubit_function::{
19 ArcTransformer,
20 BoxTransformer,
21 RcTransformer,
22 Transformer,
23};
24use std::sync::Arc;
25use std::thread;
26
27fn main() {
28 println!("=== TransformerOnce Demo ===\n");
29
30 println!("1. BoxTransformer TransformerOnce demonstration:");
32 let double = BoxTransformer::new(|x: i32| x * 2);
33 let result = double.apply(21);
34 println!(" double.apply(21) = {}", result);
35
36 let double = BoxTransformer::new(|x: i32| x * 2);
38 let boxed = double.into_box();
39 let result = boxed.apply(21);
40 println!(" double.into_box().apply(21) = {}", result);
41
42 let double = BoxTransformer::new(|x: i32| x * 2);
44 let func = double.into_fn();
45 let result = func(21);
46 println!(" double.into_fn()(21) = {}", result);
47
48 println!();
49
50 println!("2. RcTransformer TransformerOnce demonstration:");
52 let uppercase = RcTransformer::new(|s: String| s.to_uppercase());
53 let result = uppercase.apply("hello".to_string());
54 println!(" uppercase.apply(\"hello\") = {}", result);
55
56 let uppercase = RcTransformer::new(|s: String| s.to_uppercase());
58 let uppercase_clone = uppercase.clone();
59 let result1 = uppercase.apply("world".to_string());
60 let result2 = uppercase_clone.apply("rust".to_string());
61 println!(" uppercase.apply(\"world\") = {}", result1);
62 println!(" uppercase_clone.apply(\"rust\") = {}", result2);
63
64 println!();
65
66 println!("3. ArcTransformer TransformerOnce demonstration:");
68 let parse_and_double = ArcTransformer::new(|s: String| s.parse::<i32>().unwrap_or(0) * 2);
69 let result = parse_and_double.apply("21".to_string());
70 println!(" parse_and_double.apply(\"21\") = {}", result);
71
72 println!("4. ArcTransformer thread safety demonstration:");
74 let double = ArcTransformer::new(|x: i32| x * 2);
75 let double_arc = Arc::new(double);
76 let _double_clone = Arc::clone(&double_arc);
77
78 let handle = thread::spawn(move || {
79 let new_double = ArcTransformer::new(|x: i32| x * 2);
81 new_double.apply(21)
82 });
83
84 let result = handle.join().unwrap();
85 println!(" Executed in thread: new_double.apply(21) = {}", result);
86
87 println!("\n=== Demo completed ===");
88}