docs.rs failed to build dbus-0.0.7
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build:
dbus-0.9.7
A DBus binding for rust.
Current state: WIP, but these things should be up and working:
- Connect to system or session bus
- Method calls send/receive
- Signals send/receive
- Properties, on both client and server sides (set/get/getall methods, but no signals)
- Server side introspection
- Server side method dispatch (boxed closures) and property get/set dispatch (trait objects)
Examples
Client
This example opens a connection to the session bus and asks for a list of all names currently present.
let c = Connection::get_private(BusType::Session).unwrap();
let m = Message::new_method_call("org.freedesktop.DBus", "/", "org.freedesktop.DBus", "ListNames").unwrap();
let mut r = c.send_with_reply_and_block(m, 2000).unwrap();
let reply = r.get_items();
println!("{}", reply);
You can try a similar example by running:
cargo run --example client
Server
This example grabs the com.example.test bus name, registers the /hello path and adds a method which returns a string. It then listens for incoming D-Bus events and handles them accordingly.
let c = Connection::get_private(BusType::Session).unwrap();
c.register_name("com.example.test", NameFlag::ReplaceExisting as u32).unwrap();
let mut o = ObjectPath::new(&c, "/hello", true);
o.insert_interface("com.example.test", Interface::new(
vec!(Method::new("Hello", vec!(),
vec!(Argument::new("reply", "s")),
Box::new(|msg| Ok(vec!(MessageItem::Str(format!("Hello {}!", msg.sender().unwrap())))))
)),
vec!(), vec!()
));
o.set_registered(true).unwrap();
for n in c.iter(1000) {
match n {
ConnectionItem::MethodCall(mut m) => {
o.handle_message(&mut m);
},
_ => {},
}
}
You can try a similar example by running:
cargo run --example server
Properties
This example gets the current version of the Policykit backend.
let c = Connection::get_private(BusType::System).unwrap();
let p = Props::new(&c, "org.freedesktop.PolicyKit1", "/org/freedesktop/PolicyKit1/Authority",
"org.freedesktop.PolicyKit1.Authority", 10000);
let v = p.get("BackendVersion").unwrap();
You can try a this example by running:
cargo run --example properties
For an extended example, which also uses non-panicing error handling, see
examples/rtkit.rs
License
Apache / MIT dual licensed.