async_rustbus/rustbus_core/
standard_messages.rs1use crate::rustbus_core;
3
4use rustbus_core::message_builder::DynamicHeader;
5use rustbus_core::message_builder::MarshalledMessage;
6use rustbus_core::message_builder::MessageBuilder;
7
8pub fn hello() -> MarshalledMessage {
9 make_standard_msg("Hello")
10}
11
12pub fn ping(dest: String) -> MarshalledMessage {
13 MessageBuilder::new()
14 .call("Ping")
15 .on("/org/freedesktop/DBus")
16 .with_interface("org.freedesktop.DBus.Peer")
17 .at(dest)
18 .build()
19}
20
21pub fn ping_bus() -> MarshalledMessage {
22 MessageBuilder::new()
23 .call("Ping")
24 .on("/org/freedesktop/DBus")
25 .with_interface("org.freedesktop.DBus.Peer")
26 .build()
27}
28
29pub fn list_names() -> MarshalledMessage {
30 make_standard_msg("ListNames")
31}
32
33pub const DBUS_NAME_FLAG_ALLOW_REPLACEMENT: u32 = 1;
34pub const DBUS_NAME_FLAG_REPLACE_EXISTING: u32 = 1 << 1;
35pub const DBUS_NAME_FLAG_DO_NOT_QUEUE: u32 = 1 << 2;
36
37pub const DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER: u32 = 1;
38pub const DBUS_REQUEST_NAME_REPLY_IN_QUEUE: u32 = 2;
39pub const DBUS_REQUEST_NAME_REPLY_EXISTS: u32 = 3;
40pub const DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER: u32 = 4;
41
42fn make_standard_msg(name: &str) -> MarshalledMessage {
43 MessageBuilder::new()
44 .call(name)
45 .on("/org/freedesktop/DBus")
46 .with_interface("org.freedesktop.DBus")
47 .at("org.freedesktop.DBus")
48 .build()
49}
50pub fn request_name(name: &str, flags: u32) -> MarshalledMessage {
52 let mut msg = make_standard_msg("RequestName");
53 msg.body.push_param(name).unwrap();
54 msg.body.push_param(flags).unwrap();
55 msg
56}
57
58pub fn release_name(name: &str) -> MarshalledMessage {
60 let mut msg = make_standard_msg("ReleaseName");
61 msg.body.push_param(name).unwrap();
62 msg
63}
64
65pub fn add_match(match_rule: &str) -> MarshalledMessage {
67 let mut msg = make_standard_msg("AddMatch");
68 msg.body.push_param(match_rule).unwrap();
69 msg
70}
71pub fn remove_match(match_rule: &str) -> MarshalledMessage {
73 let mut msg = make_standard_msg("RemoveMatch");
74 msg.body.push_param(match_rule).unwrap();
75 msg
76}
77pub fn unknown_method(call: &DynamicHeader) -> MarshalledMessage {
79 let text = format!(
80 "No calls to {}.{} are accepted for object {}",
81 call.interface.clone().unwrap_or_else(|| "".to_owned()),
82 call.member.clone().unwrap_or_else(|| "".to_owned()),
83 call.object.clone().unwrap_or_else(|| "".to_owned()),
84 );
85 call.make_error_response(
86 "org.freedesktop.DBus.Error.UnknownMethod".to_owned(),
87 Some(text),
88 )
89}
90
91pub fn invalid_args(call: &DynamicHeader, sig: Option<&str>) -> MarshalledMessage {
93 let text = format!(
94 "Invalid arguments for calls to {}.{} on object {} {}",
95 call.interface.clone().unwrap_or_else(|| "".to_owned()),
96 call.member.clone().unwrap_or_else(|| "".to_owned()),
97 call.object.clone().unwrap_or_else(|| "".to_owned()),
98 if let Some(sig) = sig {
99 format!("expected signature: {}", sig)
100 } else {
101 "".to_owned()
102 }
103 );
104
105 call.make_error_response(
106 "org.freedesktop.DBus.Error.InvalidArgs".to_owned(),
107 Some(text),
108 )
109}