busmust_sys/
data_builder.rs1use std::convert::TryFrom;
2use ::{BMData, BMDataHeader};
3use ::{BM_DATA_PAYLOAD_MAX_SIZE, BMDataType};
4use BMCanMessage;
5
6impl BMData {
7 pub fn builder() -> BMDataBuilder {
8 BMDataBuilder::default()
9 }
10}
11
12#[derive(Default)]
14pub struct BMDataBuilder {
15 header: BMDataHeader,
16 payload: Vec<u8>,
17}
18
19impl BMDataBuilder {
20 pub fn new(payload: Vec<u8>) -> BMDataBuilder {
21 let mut vec = Vec::from(payload);
22 vec.resize(BM_DATA_PAYLOAD_MAX_SIZE, 0);
23
24 BMDataBuilder {
25 header: BMDataHeader::new().with_kind(BMDataType::Can as u8),
26 payload: vec
27 }
28 }
29
30 pub fn kind(mut self, kind: BMDataType) {
31 self.header = BMDataHeader::new()
32 .with_kind(kind as u8)
33 .with_flags(self.header.flags())
34 .with_dchn(self.header.dchn())
35 .with_schn(self.header.schn())
36 }
37
38 pub fn dst_chn(mut self, dst_chn: u8) {
39 self.header = BMDataHeader::new()
40 .with_kind(self.header.kind())
41 .with_flags(self.header.flags())
42 .with_dchn(dst_chn)
43 .with_schn(self.header.schn())
44 }
45
46 pub fn src_chn(mut self, src_chn: u8) {
47 self.header = BMDataHeader::new()
48 .with_kind(self.header.kind())
49 .with_flags(self.header.flags())
50 .with_dchn(self.header.dchn())
51 .with_schn(src_chn)
52 }
53
54 pub fn payload(mut self, value: Vec<u8>) -> BMDataBuilder {
55 let mut vec = Vec::from(value);
56 vec.resize(BM_DATA_PAYLOAD_MAX_SIZE, 0);
57
58 self.payload = vec;
59 self
60 }
61
62 pub fn can_message(mut self, value: BMCanMessage) -> BMDataBuilder {
63 self.payload = value.to_bytes();
64 self.header = BMDataHeader::new().with_kind(BMDataType::Can as u8);
65 self
66 }
67
68 pub fn build(self) -> BMData {
69 BMData {
70 header: self.header,
71 length: self.payload.len() as u16,
72 timestamp: 0,
73 payload: <[u8; BM_DATA_PAYLOAD_MAX_SIZE]>::try_from(self.payload).unwrap(),
74 }
75 }
76}