dbc_rs/dbc/builder/
methods.rs1use super::DbcBuilder;
2use crate::{MessageBuilder, NodesBuilder, VersionBuilder};
3
4impl DbcBuilder {
5 #[must_use = "builder method returns modified builder"]
18 pub fn version(mut self, version: VersionBuilder) -> Self {
19 self.version = version;
20 self
21 }
22
23 #[must_use = "builder method returns modified builder"]
35 pub fn nodes(mut self, nodes: NodesBuilder) -> Self {
36 self.nodes = nodes;
37 self
38 }
39
40 #[must_use = "builder method returns modified builder"]
58 pub fn add_message(mut self, message: MessageBuilder) -> Self {
59 self.messages.push(message);
60 self
61 }
62
63 #[must_use = "builder method returns modified builder"]
78 pub fn add_messages(mut self, messages: impl IntoIterator<Item = MessageBuilder>) -> Self {
79 self.messages.extend(messages);
80 self
81 }
82
83 #[must_use = "builder method returns modified builder"]
94 pub fn clear_messages(mut self) -> Self {
95 self.messages.clear();
96 self
97 }
98}
99
100#[cfg(test)]
101mod tests {
102 #![allow(clippy::float_cmp)]
103 use super::DbcBuilder;
104 use crate::{
105 ByteOrder, MessageBuilder, NodesBuilder, ReceiversBuilder, SignalBuilder, VersionBuilder,
106 };
107
108 #[test]
109 fn test_dbc_builder_add_messages() {
110 let version = VersionBuilder::new().version("1.0");
111 let nodes = NodesBuilder::new().add_nodes(["ECM"]);
112 let signal1 = SignalBuilder::new()
113 .name("RPM")
114 .start_bit(0)
115 .length(16)
116 .byte_order(ByteOrder::BigEndian)
117 .unsigned(true)
118 .factor(1.0)
119 .offset(0.0)
120 .min(0.0)
121 .max(100.0)
122 .receivers(ReceiversBuilder::new().none());
123 let signal2 = SignalBuilder::new()
124 .name("RPM")
125 .start_bit(0)
126 .length(16)
127 .byte_order(ByteOrder::BigEndian)
128 .unsigned(true)
129 .factor(1.0)
130 .offset(0.0)
131 .min(0.0)
132 .max(100.0)
133 .receivers(ReceiversBuilder::new().none());
134 let message1 = MessageBuilder::new()
135 .id(256)
136 .name("EngineData")
137 .dlc(8)
138 .sender("ECM")
139 .add_signal(signal1);
140 let message2 = MessageBuilder::new()
141 .id(512)
142 .name("BrakeData")
143 .dlc(4)
144 .sender("ECM")
145 .add_signal(signal2);
146
147 let dbc = DbcBuilder::new()
148 .version(version)
149 .nodes(nodes)
150 .add_messages(vec![message1, message2])
151 .build()
152 .unwrap();
153
154 assert_eq!(dbc.messages().len(), 2);
155 }
156
157 #[test]
158 fn test_dbc_builder_messages() {
159 let version = VersionBuilder::new().version("1.0");
160 let nodes = NodesBuilder::new().add_nodes(["ECM"]);
161
162 let signal1 = SignalBuilder::new()
163 .name("RPM")
164 .start_bit(0)
165 .length(16)
166 .byte_order(ByteOrder::BigEndian)
167 .unsigned(true)
168 .factor(1.0)
169 .offset(0.0)
170 .min(0.0)
171 .max(100.0)
172 .receivers(ReceiversBuilder::new().none());
173 let message1 = MessageBuilder::new()
174 .id(256)
175 .name("EngineData")
176 .dlc(8)
177 .sender("ECM")
178 .add_signal(signal1);
179
180 let signal2 = SignalBuilder::new()
181 .name("RPM")
182 .start_bit(0)
183 .length(16)
184 .byte_order(ByteOrder::BigEndian)
185 .unsigned(true)
186 .factor(1.0)
187 .offset(0.0)
188 .min(0.0)
189 .max(100.0)
190 .receivers(ReceiversBuilder::new().none());
191 let message2 = MessageBuilder::new()
192 .id(512)
193 .name("EngineData2")
194 .dlc(8)
195 .sender("ECM")
196 .add_signal(signal2);
197
198 let dbc = DbcBuilder::new()
199 .version(version)
200 .nodes(nodes)
201 .add_message(message1)
202 .add_message(message2)
203 .build()
204 .unwrap();
205
206 assert_eq!(dbc.messages().len(), 2);
207 }
208
209 #[test]
210 fn test_dbc_builder_clear_messages() {
211 let version = VersionBuilder::new().version("1.0");
212 let nodes = NodesBuilder::new().add_nodes(["ECM"]);
213 let signal = SignalBuilder::new()
214 .name("RPM")
215 .start_bit(0)
216 .length(16)
217 .byte_order(ByteOrder::BigEndian)
218 .unsigned(true)
219 .factor(1.0)
220 .offset(0.0)
221 .min(0.0)
222 .max(100.0)
223 .receivers(ReceiversBuilder::new().none());
224 let message = MessageBuilder::new()
225 .id(256)
226 .name("EngineData")
227 .dlc(8)
228 .sender("ECM")
229 .add_signal(signal);
230
231 let dbc = DbcBuilder::new()
232 .version(version)
233 .nodes(nodes)
234 .add_message(message)
235 .clear_messages()
236 .build()
237 .unwrap();
238
239 assert_eq!(dbc.messages().len(), 0);
240 }
241}