busmust_sys/
can_message_builder.rs1use std::convert::TryFrom;
2use ::{BMCanMessage, BMMessageId};
3use ::{BMMessageCtrl, BMTxMessageCtrl};
4
5impl BMCanMessage {
6 pub fn builder() -> BMCanMessageBuilder {
7 BMCanMessageBuilder::default()
8 }
9}
10
11#[derive(Default)]
13pub struct BMCanMessageBuilder {
14 sid: Option<u16>,
15 eid: Option<u32>,
16 dlc: Option<u8>,
17 ide: Option<bool>,
18 rtr: Option<bool>,
19 brs: Option<bool>,
20 fdf: Option<bool>,
21 payload: Vec<u8>
22}
23
24impl BMCanMessageBuilder {
25 pub fn new(payload: Vec<u8>) -> BMCanMessageBuilder {
26 let mut vec = Vec::from(payload);
27 vec.resize(64, 0);
28
29 BMCanMessageBuilder {
30 sid: None,
31 eid: None,
32 dlc: None,
33 ide: None,
34 rtr: None,
35 brs: None,
36 fdf: None,
37 payload: vec
38 }
39 }
40
41 pub fn sid(mut self, value: u16) -> BMCanMessageBuilder {
42 self.sid = Some(value);
43 self
44 }
45
46 pub fn eid(mut self, value: u32) -> BMCanMessageBuilder {
47 self.eid = Some(value);
48 self
49 }
50
51 pub fn dlc(mut self, value: u8) -> BMCanMessageBuilder {
52 self.dlc = Some(value);
53 self
54 }
55
56 pub fn ide(mut self, value: bool) -> BMCanMessageBuilder {
57 self.ide = Some(value);
58 self
59 }
60
61 pub fn rtr(mut self, value: bool) -> BMCanMessageBuilder {
62 self.rtr = Some(value);
63 self
64 }
65
66 pub fn brs(mut self, value: bool) -> BMCanMessageBuilder {
67 self.brs = Some(value);
68 self
69 }
70
71 pub fn fdf(mut self, value: bool) -> BMCanMessageBuilder {
72 self.fdf = Some(value);
73 self
74 }
75
76 pub fn payload(mut self, value: Vec<u8>) -> BMCanMessageBuilder {
77 self.dlc = Some(value.len() as u8);
78
79 let mut vec = Vec::from(value);
80 vec.resize(64, 0);
81
82 self.payload = vec;
83 self
84 }
85
86 pub fn build(self) -> BMCanMessage {
87 BMCanMessage {
88 mid: BMMessageId::new()
89 .with_sid(self.sid.unwrap_or_default())
90 .with_eid(self.eid.unwrap_or_default()),
91 ctrl: BMMessageCtrl {
92 tx: BMTxMessageCtrl::new()
93 .with_dlc(self.dlc.unwrap_or_default())
94 .with_ide(self.ide.unwrap_or_default())
95 .with_rtr(self.rtr.unwrap_or_default())
96 .with_brs(self.brs.unwrap_or_default())
97 .with_fdf(self.fdf.unwrap_or_default()),
98 },
99 payload: <[u8; 64]>::try_from(self.payload).unwrap()
100 }
101 }
102}