use ops::prelude::*;
use ops::{
dry_get, dry_get_key, dry_put, dry_put_key, dry_require, dry_require_key, dry_result,
wet_get_ref, wet_get_ref_key, wet_put_arc, wet_put_arc_key, wet_require_ref,
wet_require_ref_key,
};
use std::sync::Arc;
#[tokio::main]
async fn main() -> OpResult<()> {
let mut dry = DryContext::new();
let mut wet = WetContext::new();
println!(" COMPLETE CONTEXT MACROS DEMONSTRATION \n");
println!("=== Dry Context Macros ===");
let username = "alice".to_string();
let user_id = 123u32;
dry_put!(dry, username); dry_put!(dry, user_id); dry_put_key!(dry, "session_id", "sess_789");
let retrieved_username: Option<String> = dry_get!(dry, username);
let retrieved_user_id: Option<u32> = dry_get!(dry, user_id);
let session_id: Option<String> = dry_get_key!(dry, "session_id");
println!("Retrieved username: {:?}", retrieved_username);
println!("Retrieved user_id: {:?}", retrieved_user_id);
println!("Retrieved session_id: {:?}", session_id);
let required_username: String = dry_require!(dry, username)?;
let required_session: String = dry_require_key!(dry, "session_id")?;
println!("Required username: {}", required_username);
println!("Required session: {}", required_session);
let operation_result = "SUCCESS".to_string();
dry_result!(dry, "MyOperation", operation_result);
let my_op_result: Option<String> = dry_get_key!(dry, "MyOperation");
let result: Option<String> = dry_get_key!(dry, "result");
println!("MyOperation result: {:?}", my_op_result);
println!("Generic result: {:?}", result);
println!("\n=== Wet Context Macros ===");
let test_string = Arc::new("Hello, World!".to_string());
let test_vec = Arc::new(vec![1, 2, 3, 4, 5]);
let arc_string = Arc::new("Shared String".to_string());
let arc_vec = Arc::new(vec!["a".to_string(), "b".to_string()]);
wet_put_arc!(wet, test_string, test_string.clone());
wet_put_arc_key!(wet, "numbers", test_vec.clone());
wet_put_arc!(wet, arc_string);
wet_put_arc_key!(wet, "string_vec", arc_vec.clone());
let retrieved_string_ref: Option<Arc<String>> = wet_get_ref!(wet, test_string);
let retrieved_numbers: Option<Arc<Vec<i32>>> = wet_get_ref_key!(wet, "numbers");
println!("Retrieved string ref: {:?}", retrieved_string_ref);
println!("Retrieved numbers: {:?}", retrieved_numbers);
let required_arc_string: Arc<String> = wet_require_ref!(wet, arc_string)?;
let required_string_vec: Arc<Vec<String>> = wet_require_ref_key!(wet, "string_vec")?;
println!("Required arc string: {}", required_arc_string);
println!("Required string vec: {:?}", required_string_vec);
println!("\nOK ALL CONTEXT MACROS WORKING PERFECTLY!");
println!("\n COMPLETE MACRO SET:");
println!("DRY CONTEXT:");
println!(" • dry_put!(ctx, var) / dry_put!(ctx, var, value)");
println!(" • dry_put_key!(ctx, key, value)");
println!(" • dry_get!(ctx, var)");
println!(" • dry_get_key!(ctx, key)");
println!(" • dry_require!(ctx, var)");
println!(" • dry_require_key!(ctx, key)");
println!(" • dry_result!(ctx, trigger_name, result)");
println!("WET CONTEXT:");
println!(" • wet_put_ref!(ctx, var, value) / wet_put_ref!(ctx, var)");
println!(" • wet_put_ref_key!(ctx, key, value)");
println!(" • wet_put_arc!(ctx, var, value) / wet_put_arc!(ctx, var)");
println!(" • wet_put_arc_key!(ctx, key, value)");
println!(" • wet_get_ref!(ctx, var)");
println!(" • wet_get_ref_key!(ctx, key)");
println!(" • wet_require_ref!(ctx, var)");
println!(" • wet_require_ref_key!(ctx, key)");
Ok(())
}