// Build with: cross build --release --example invoke-method use oc2r_core::{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(()) }