use anyhow::Result; use clap::Subcommand; use dbus::blocking::{Connection, Proxy}; const DBUS_NAME: &str = "net.buzzert.kordophonecd"; const DBUS_PATH: &str = "/net/buzzert/kordophonecd"; mod dbus_interface { #![allow(unused)] include!(concat!(env!("OUT_DIR"), "/kordophone-client.rs")); } use dbus_interface::NetBuzzertKordophoneServer as KordophoneServer; #[derive(Subcommand)] pub enum Commands { /// Prints the server Kordophone version. Version, } impl Commands { pub async fn run(cmd: Commands) -> Result<()> { let mut client = DaemonCli::new()?; match cmd { Commands::Version => client.print_version().await, } } } struct DaemonCli { conn: Connection, } impl DaemonCli { pub fn new() -> Result { Ok(Self { conn: Connection::new_session()? }) } fn proxy(&self) -> Proxy<&Connection> { self.conn.with_proxy(DBUS_NAME, DBUS_PATH, std::time::Duration::from_millis(5000)) } pub async fn print_version(&mut self) -> Result<()> { let version = KordophoneServer::get_version(&self.proxy())?; println!("Server version: {}", version); Ok(()) } }