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}