[−][src]Type Definition rustbus::connection::rpc_conn::MessageFilter
type MessageFilter = Box<dyn Fn(&MarshalledMessage) -> bool + Sync + Send>;
Filter out messages you dont want in your RpcConn. If this filters out a call, the RpcConn will send a UnknownMethod error to the caller. Other messages are just dropped if the filter returns false.
use rustbus::{get_session_bus_path, standard_messages, DuplexConn, params::Container, params::DictMap, MessageBuilder, MessageType, RpcConn}; fn main() -> Result<(), rustbus::connection::Error> { let session_path = get_session_bus_path()?; let con = DuplexConn::connect_to_bus(session_path, true)?; let mut rpc_con = RpcConn::new(con); rpc_con.set_filter(Box::new(|msg| match msg.typ { MessageType::Call => { let right_interface_object = msg.dynheader.object.eq(&Some("/io/killing/spark".into())) && msg.dynheader.interface.eq(&Some("io.killing.spark".into())); let right_member = if let Some(member) = &msg.dynheader.member { member.eq("Echo") || member.eq("Reverse") } else { false }; let keep = right_interface_object && right_member; if !keep { println!("Discard: {:?}", msg); } keep } MessageType::Invalid => false, MessageType::Error => true, MessageType::Reply => true, MessageType::Signal => false, })); Ok(()) }