use rayrust::prelude::*;
#[rayrust::remote]
fn add(a: i32, b: i32) -> i32 {
a + b
}
#[rayrust::remote]
fn greet(name: String) -> String {
format!("Hello, {}!", name)
}
fn main() {
println!("Registering remote functions...");
println!("\n--- Init (local mode) ---");
rayrust::init_with_config(&RayConfig::local()).expect("local init failed");
println!("✓ Ray initialized (local mode)");
println!("\n--- Put / Get ---");
let obj = rayrust::put(&42i32);
println!("Put 42i32 → ObjectRef(id_len={})", obj.id().len());
match rayrust::get(&obj) {
Ok(val) => println!("Get → {} ✓", val),
Err(e) => println!("Get failed: {}", e),
}
let obj2 = rayrust::put(&"hello ray from rust!".to_string());
match rayrust::get(&obj2) {
Ok(val) => println!("Get String → {} ✓", val),
Err(e) => println!("Get String failed: {}", e),
}
println!("\n--- Remote Task (local mode) ---");
add_register();
greet_register();
println!("✓ Functions registered");
let obj_ref = add_remote(1, 2);
println!("Task 'add(1, 2)' submitted → ObjectRef(id_len={})", obj_ref.id().len());
match obj_ref.get() {
Ok(val) => println!("Task result: {} ✓", val),
Err(e) => println!("Task result get failed: {}", e),
}
let obj_ref2 = greet_remote("Ray".to_string());
println!("Task 'greet(\"Ray\")' submitted");
match obj_ref2.get() {
Ok(val) => println!("Greet result: {} ✓", val),
Err(e) => println!("Greet result get failed: {}", e),
}
println!("\n--- Namespace ---");
match rayrust::get_namespace() {
Ok(ns) => println!("Namespace: {}", ns),
Err(e) => println!("Get namespace failed: {}", e),
}
println!("\n--- Shutdown ---");
rayrust::shutdown();
println!("✓ Ray shutdown");
}