1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// //! Implementation of a [Dash7](https://dash7-alliance.org/) ALP protocol parser
// //!
// //! The protocol
// //! ==============================================================================
// //! The protocol specifies ALP Commands that can be sent to another system to communicate.
// //! Each command is an aggregation of ALP Actions.
// //!
// //! The protocol is based on the fact that each communicating party hold a Dash7 filesystem.
// //! Each request toward an other device is then composed as an array of simple filesystem operation
// //! (ALP actions).
// //!
// //! Notes
// //! ==============================================================================
// //! Group
// //! ------------------------------------------------------------------------------
// //! Many ALP action have a group flag. This allows those to be grouped.
// //!
// //! This means that:
// //! - If any action of this group fails, the next actions are skipped.
// //! - A query before the group will apply to the whole group (to defined
// //! whether it will be executed).
// //! - If the group contains queries, a prior Logical action will determine how they
// //! are composed between them (OR, XOR, NOR, NAND). Without any Logical action, the
// //! queries are AND'ed.

use mutually_exclusive_features::exactly_one_of;
exactly_one_of!("spec_v1_2", "subiot_v0", "wizzilab_v5_3");

/// Application layer (ALP)
pub mod app;

/// Transport layer
pub mod transport;

/// Network layer
pub mod network;

/// Session lauyer
pub mod session;

/// Physycal layer
pub mod physical;

/// Data/Filesystem layer
pub mod data;

/// Datalink layer
pub mod link;

/// Utility functions
pub(crate) mod utils;

/// Reusable types
pub mod types;

/// System files
pub mod file;

#[cfg(test)]
mod test_tools;