use futures_util::stream::TryStreamExt; use zbus::{Connection, Result}; #[tokio::main] async fn main() -> Result<()> { let connection = Connection::session().await?; connection .request_name("org.freedesktop.Notifications") // Requesting dbus for this service name. Any other services using this name should be stopped/disabled before this .await?; let mut stream = zbus::MessageStream::from(&connection); // Convert connection to a MessageStream, yields Message items while let Some(msg) = stream.try_next().await? { // Check if the message is a method call to the "Notify" method if let Some(member) = msg.header().member().map(|m| m.as_str()) { if member == "GetServerInformation" { println!("Member is: {}", member); // Respond with server information let response = ("SNot", "candifloss.cc", "0.1.0", "1.0"); // (name, vendor, version, spec_version) connection.reply(&msg, &response).await?; } else if member == "Notify" { println!("Member is: {}", member); // Respond with a notification ID (usually a unique number) let notification_id: u32 = 1; // This could be incremented or generated connection.reply(&msg, ¬ification_id).await?; } else { println!("Unhandled method: {}", member); } } } Ok(()) }