Files
oc2r-rust/examples/invoke-method.rs
2025-10-29 18:03:54 +01:00

38 lines
1.0 KiB
Rust

// Build with: cross build --release --example invoke-method
use oc2r_rust::{DEFAULT_DEVICE_PATH, DeviceBus, Result};
fn main() -> Result<()> {
let mut bus = DeviceBus::connect(DEFAULT_DEVICE_PATH)?;
let devices = bus.list()?;
let Some(first) = devices.first() else {
println!("No OC2R devices detected.");
return Ok(());
};
println!("Inspecting {}", first.device_id);
let mut device = bus
.device(&first.device_id)?
.expect("device disappeared after list()");
let methods = device.methods()?.to_vec();
for method in &methods {
println!("{}()", method.name);
}
if let Some(method) = methods.iter().find(|m| m.parameters.is_empty()) {
println!("Invoking {}()", method.name);
let result = device.call(&method.name, ())?;
println!("Result: {result:?}");
} else {
println!("No zero-argument methods available to invoke.");
}
// Example for passing parameters:
// device.call("setRedstoneOutput", ("east", 15_u8))?;
Ok(())
}