calamp_rs/
lib.rs

1//
2// Copyright (c) 2021 Murilo Ijanc' <mbsd@m0x.ru>
3//
4// Permission to use, copy, modify, and distribute this software for any
5// purpose with or without fee is hereby granted, provided that the above
6// copyright notice and this permission notice appear in all copies.
7//
8// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
11// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
12// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
13//
14
15//! Calamp LMDirect message parser.
16#[cfg(feature = "serde")]
17use serde::{Deserialize, Serialize};
18
19pub mod message_header;
20pub mod messages;
21pub mod options_header;
22mod utils;
23
24use message_header::MessageHeader;
25use messages::event_report::EventReport;
26use options_header::OptionsHeader;
27
28#[derive(Debug)]
29#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30pub struct Message {
31    pub options_header: Option<OptionsHeader>,
32    pub message_header: MessageHeader,
33    pub msg: EventReport,
34}
35
36impl Message {
37    pub fn parse(input: &[u8]) -> Self {
38        let (i, options_header) = OptionsHeader::parse(input).unwrap();
39        let (i, message_header) = MessageHeader::parse(i).unwrap();
40        let msg = EventReport::parse(i).unwrap();
41
42        Message {
43            options_header,
44            message_header,
45            msg,
46        }
47    }
48}