use std::{error::Error, future::pending};
use logcontrol::LogControl1;
use zbus::ConnectionBuilder;
struct DummyLogControl {
level: logcontrol::LogLevel,
target: logcontrol::KnownLogTarget,
}
impl LogControl1 for DummyLogControl {
fn level(&self) -> logcontrol::LogLevel {
self.level
}
fn set_level(
&mut self,
level: logcontrol::LogLevel,
) -> Result<(), logcontrol::LogControl1Error> {
eprintln!("Setting level to {level}");
self.level = level;
Ok(())
}
fn target(&self) -> &str {
self.target.as_str()
}
fn set_target<S: AsRef<str>>(&mut self, target: S) -> Result<(), logcontrol::LogControl1Error> {
eprintln!("Setting target to {}", target.as_ref());
self.target = target.as_ref().try_into()?;
Ok(())
}
fn syslog_identifier(&self) -> &str {
"foo"
}
}
#[async_std::main]
async fn main() -> Result<(), Box<dyn Error>> {
let control = DummyLogControl {
level: logcontrol::LogLevel::Info,
target: logcontrol::KnownLogTarget::Console,
};
let _conn = ConnectionBuilder::session()?
.name("de.swsnr.logcontrol.SimpleServerExample")?
.serve_at(
logcontrol::DBUS_OBJ_PATH,
logcontrol_zbus::LogControl1::new(control),
)?
.build()
.await?;
pending::<()>().await;
Ok(())
}