13 stable releases (3 major)
4.3.1 | Dec 16, 2021 |
---|---|
4.3.0 | Dec 12, 2021 |
4.2.0 | Jul 27, 2021 |
4.1.0 | Jan 31, 2021 |
1.0.0 | Dec 19, 2019 |
#2261 in Parser implementations
31 downloads per month
Used in 3 crates
185KB
4.5K
SLoC
dbus-message-parser
A library to encode and decode DBus message.
Usage
Add this to your Cargo.toml
:
[dependencies]
dbus-message-parser = "~4.3.1"
Example
The following examples show how to create a METHOD_CALL
message and a SIGNAL
message.
use bytes::Bytes;
use dbus_message_parser::message::Message;
use dbus_message_parser::value::Value;
use std::convert::TryInto;
fn create_method_call() {
// Create a MessageCall
// Arguments:
// 1. destination
// 2. object path
// 3. interface
// 4. method
let mut msg = Message::method_call(
"destination.address".try_into().unwrap(),
"/object/path".try_into().unwrap(),
"interface.name".try_into().unwrap(),
"MethodName".try_into().unwrap(),
);
// Add the first argument to the MessageCall
msg.add_value(Value::String("String Argument".to_string()));
// Add the second argument to the MessageCall
msg.add_value(Value::Uint32(0));
println!("{:?}", msg);
let bytes = msg.encode().unwrap();
println!("{:?}", bytes);
}
fn create_signal() {
// Create a Signal
// Arguments
// 1. object path
// 2. interface
// 3. Signal name
let mut signal = Message::signal(
"/object/path".try_into().unwrap(),
"interface.name".try_into.unwrap(),
"SignalName".try_into().unwrap(),
);
// Add the first argument to the MessageCall
signal.add_value(Value::Uint32(0));
// Add the second argument to the MessageCall
signal.add_value(Value::Double(1.0));
println!("{:?}", signal);
let bytes = signal.encode().unwrap();
println!("{:?}", bytes);
}
fn decode_method_call() {
// A message encoded as bytes
let bytes = Bytes::copy_from_slice(
&b"\x6c\x01\x00\x01\x0a\x00\x00\x00\xb1\x00\x00\x00\x9e\x00\x00\x00\x01\x01\x6f\x00\x15\x00\
\x00\x00\x2f\x6f\x72\x67\x2f\x66\x72\x65\x65\x64\x65\x73\x6b\x74\x6f\x70\x2f\x44\x42\x75\
\x73\x00\x00\x00\x02\x01\x73\x00\x14\x00\x00\x00\x6f\x72\x67\x2e\x66\x72\x65\x65\x64\x65\
\x73\x6b\x74\x6f\x70\x2e\x44\x42\x75\x73\x00\x00\x00\x00\x06\x01\x73\x00\x14\x00\x00\x00\
\x6f\x72\x67\x2e\x66\x72\x65\x65\x64\x65\x73\x6b\x74\x6f\x70\x2e\x44\x42\x75\x73\x00\x00\
\x00\x00\x08\x01\x67\x00\x01\x73\x00\x00\x03\x01\x73\x00\x1a\x00\x00\x00\x47\x65\x74\x43\
\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x55\x6e\x69\x78\x50\x72\x6f\x63\x65\x73\x73\x49\x44\
\x00\x00\x00\x00\x00\x00\x07\x01\x73\x00\x05\x00\x00\x00\x3a\x31\x2e\x35\x30\x00\x00\x00\
\x05\x00\x00\x00\x3a\x31\x2e\x35\x35\x00"[..],
);
// Decode the message
let (msg, _) = Message::decode(bytes).unwrap();
println!("Message is decoded: {:?}", msg);
}
License
This project is licensed under the BSD-3-Clause license.
Contribution
Any contribution intentionally submitted for inclusion in dbus-message-parser
by you, shall be
licensed as BSD-3-Clause, without any additional
terms or conditions.
Dependencies
~0.6–1MB
~23K SLoC