use std::env;
use tango::dev::{AttrRead, DevProxy};
use tango::error::Result;
fn main() -> Result<()> {
let name = env::args().nth(1).unwrap_or_else(|| "test/motor/1".to_string());
let motor = DevProxy::new(name.as_str());
println!("{} is {:?}: {}", motor.name()?, motor.state()?, motor.status()?.value());
let read: AttrRead<f64> = motor.read_attr::<f64, _>("position")?;
println!("position = {:?} (set point {:?}, {:?})", read.value, read.w_value, read.quality);
let (position, limit) = motor.read_attr::<(f64, f64), _>(("position", "limit"))?;
println!("position = {:?}, limit = {:?}", position?.value, limit?.value);
motor.write_attr(("position", 12.5))?;
let read = motor.write_read_attr(("position", 25.0))?;
println!("position written and read back = {:?}", read.value);
let reached: f64 = motor.command("MoveTo", -42.0)?;
println!("MoveTo(-42) -> {reached}");
motor.command::<_, ()>("Stop", ())?;
println!("{} is {:?}: {}", motor.name()?, motor.state()?, motor.status()?.value());
Ok(())
}