1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
use crate::message;
use crate::params;
use crate::params::Param;
#[derive(Default)]
pub struct MessageBuilder<'a, 'e> {
msg: message::Message<'a, 'e>,
}
pub struct CallBuilder<'a, 'e> {
msg: message::Message<'a, 'e>,
}
pub struct SignalBuilder<'a, 'e> {
msg: message::Message<'a, 'e>,
}
impl<'a, 'e> MessageBuilder<'a, 'e> {
pub fn new() -> MessageBuilder<'a, 'e> {
MessageBuilder {
msg: message::Message::new(),
}
}
pub fn call(mut self, member: String) -> CallBuilder<'a, 'e> {
self.msg.typ = message::MessageType::Call;
self.msg.member = Some(member);
CallBuilder { msg: self.msg }
}
pub fn signal(
mut self,
interface: String,
member: String,
object: String,
) -> SignalBuilder<'a, 'e> {
self.msg.typ = message::MessageType::Signal;
self.msg.member = Some(member);
self.msg.interface = Some(interface);
self.msg.object = Some(object);
SignalBuilder { msg: self.msg }
}
}
impl<'a, 'e> CallBuilder<'a, 'e> {
pub fn on(mut self, object_path: String) -> Self {
self.msg.object = Some(object_path);
self
}
pub fn with_interface(mut self, interface: String) -> Self {
self.msg.interface = Some(interface);
self
}
pub fn at(mut self, destination: String) -> Self {
self.msg.destination = Some(destination);
self
}
pub fn with_params<P: Into<params::Param<'a, 'e>>>(mut self, params: Vec<P>) -> Self {
self.msg.push_params(params);
self
}
pub fn build(self) -> message::Message<'a, 'e> {
self.msg
}
pub fn add_param<P: Into<Param<'a, 'e>>>(&mut self, p: P) {
self.msg.add_param(p);
}
pub fn add_param2<P1: Into<Param<'a, 'e>>, P2: Into<Param<'a, 'e>>>(&mut self, p1: P1, p2: P2) {
self.msg.add_param2(p1, p2);
}
pub fn add_param3<P1: Into<Param<'a, 'e>>, P2: Into<Param<'a, 'e>>, P3: Into<Param<'a, 'e>>>(
&mut self,
p1: P1,
p2: P2,
p3: P3,
) {
self.msg.add_param3(p1, p2, p3);
}
}
impl<'a, 'e> SignalBuilder<'a, 'e> {
pub fn to(mut self, destination: String) -> Self {
self.msg.destination = Some(destination);
self
}
pub fn with_params(mut self, params: Vec<params::Param<'a, 'e>>) -> Self {
self.msg.params.extend(params);
self
}
pub fn build(self) -> message::Message<'a, 'e> {
self.msg
}
}