#dbus #macro #task

已下架 dbus-macros

使用 dbus crate 的便捷宏

使用旧的 Rust 2015

0.2.4 2020年7月19日
0.2.3 2018年2月27日
0.2.0 2017年4月18日
0.1.0 2017年4月16日
0.0.6 2016年9月22日

#127 in #dbus

Download history 4/week @ 2024-04-11 3/week @ 2024-04-18 4/week @ 2024-04-25 6/week @ 2024-05-09 13/week @ 2024-05-16 10/week @ 2024-05-23 11/week @ 2024-05-30 13/week @ 2024-06-06 7/week @ 2024-06-13 3/week @ 2024-06-20 5/week @ 2024-06-27 13/week @ 2024-07-04 6/week @ 2024-07-11 48/week @ 2024-07-25

68 每月下载
用于 way-cooler

MIT 许可证

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