Skip to content

Convenient macros to use the dbus crate

License

Notifications You must be signed in to change notification settings

tekjar/dbus-macros-rs

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

D-Bus macros for Rust

Dealing with D-Bus in your code can be a bit tedious. These macros makes the task simpler. They are inspired by Vala's awesome D-Bus support.

Examples

Server

This example serves a bunch of methods on an object

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");
}

You can try a similar example (which has more methods) by running:

cargo run --example server

Client

This example opens a connection to the server example above and calls its methods.

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());
}

You can try a similar example (that tries more method calls on the server example) by running:

cargo run --example client

Requirements

dbus 0.5 or higher, but it's handled for you by the cargo system.

About

Convenient macros to use the dbus crate

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 100.0%