使用旧的 Rust 2015
0.2.4 |
|
---|---|
0.2.3 |
|
0.2.0 |
|
0.1.0 |
|
0.0.6 |
|
#127 in #dbus
68 每月下载
用于 way-cooler
13KB
177 行
不再维护或开发。已被 zbus 取代
Rust 的 D-Bus 宏
在代码中处理 D-Bus 可能有些繁琐。这些宏使任务更简单。它们受到了 Vala 的出色 D-Bus 支持 的启发。
示例
服务器
此示例在对象上提供了一组方法
extern crate dbus;
#[macro_use]
extern crate dbus_macros;
use dbus::{Connection, BusType};
use std::rc::Rc;
dbus_class!("com.dbus.test", class Hello (variable: i32) {
fn hello(&this) -> String {
"Hello!"
}
fn hello_with_name(&this, name: &str) -> String {
format!("Hello, {}!", name)
}
fn get_variable(&this) -> i32 {
this.variable
}
});
fn main() {
let variable = 24;
let session_connection = Connection::get_private(BusType::Session).unwrap();
let hello = Hello::new(variable);
hello.run("com.dbus.test", &session_connection, "/Hello");
}
您可以通过运行尝试类似的示例(该示例具有更多方法)
cargo run --example server
客户端
此示例打开到上面服务器示例的连接并调用其方法。
extern crate dbus;
#[macro_use]
extern crate dbus_macros;
use dbus::{Connection, BusType};
use std::rc::Rc;
dbus_interface!("com.dbus.test", interface Hello {
fn hello() -> String;
fn hello_with_name(name: &str) -> String;
fn get_variable() -> i32;
});
fn main() {
let session_connection = std::rc::Rc::new(dbus::Connection::get_private(dbus::BusType::Session).unwrap());
let hello = Hello::new("com.dbus.test", "/Hello", session_connection);
match hello.hello() {
Ok(string) => println!("{}", string),
Err(error) => println!("Error calling DBus service: {}", error),
}
println!("{}", hello.hello_with_name("World").unwrap());
println!("{}", hello.get_variable().unwrap());
}
您可以通过运行尝试类似的示例(尝试对服务器示例进行更多方法调用)
cargo run --example client
需求
dbus 0.5 或更高版本,但它由 cargo 系统处理。
依赖项
~5MB
~114K SLoC