+use dbus::blocking::Connection;
+use dbus_crossroads::{Context, Crossroads};
+use std::error::Error;
+
+fn main() -> Result<(), Box<dyn Error>> {
+ let service_name: &'static str = "com.jacobcasper.Mail";
+ let conn = Connection::new_session()?;
+ conn.request_name(service_name, false, true, false)?;
+
+ let mut crossroads = Crossroads::new();
+
+ let interface_token = crossroads.register(service_name, |builder| {
+ builder.signal::<(u32,), _>("UnreadCount", ("count",));
+ builder.method(
+ "UnreadCount",
+ ("count",),
+ (),
+ |ctx: &mut Context, _, (count,): (u32,)| {
+ ctx.push_msg(ctx.make_signal("UnreadCount", (count,)));
+ Ok(())
+ },
+ );
+ });
+
+ crossroads.insert("/com/jacobcasper/Mail/Unread", &[interface_token], ());
+ crossroads.serve(&conn)?;
+ unreachable!()
+}