nmea_kit/lib.rs
1//! # nmea-kit
2//!
3//! Bidirectional NMEA 0183 parser/encoder with AIS message decoding.
4//!
5//! ## Architecture
6//!
7//! ```text
8//! raw line ──→ parse_frame() ──→ NmeaFrame { prefix, talker, sentence_type, fields }
9//! │
10//! ┌──────────────┼──────────────┐
11//! ▼ ▼ ▼
12//! $ + known $ + unknown ! (AIVDM/AIVDO)
13//! │ │ │
14//! ▼ ▼ ▼
15//! Typed struct Raw fields AisMessage enum
16//! ```
17//!
18//! ## Public API
19//!
20//! - [`parse_frame`] / [`encode_frame`] — frame layer (always available)
21//! - [`NmeaSentence`] — dispatch enum for all typed NMEA sentences
22//! - [`NmeaEncodable`] — trait for encoding NMEA sentences to wire format
23//! - [`ais`] — AIS decoder (behind `ais` feature)
24//!
25//! ## Features
26//!
27//! - `nmea` (default) — all 52 NMEA sentence types
28//! - `ais` (default) — 16 AIS message types (read-only decode)
29//! - `dbs`, `dbt`, `dpt`, … — individual sentence types
30
31mod error;
32mod frame;
33
34// Single source of truth for the "any NMEA sentence feature is active" predicate.
35// Add new sentence feature names here when wiring a new type.
36macro_rules! nmea_item {
37 ($item:item) => {
38 #[cfg(any(
39 feature = "nmea",
40 feature = "ack",
41 feature = "aam",
42 feature = "apb",
43 feature = "bec",
44 feature = "bod",
45 feature = "bwc",
46 feature = "bwr",
47 feature = "bww",
48 feature = "dbk",
49 feature = "dbs",
50 feature = "dbt",
51 feature = "dpt",
52 feature = "dtm",
53 feature = "gbs",
54 feature = "gga",
55 feature = "gll",
56 feature = "gns",
57 feature = "gsa",
58 feature = "gsv",
59 feature = "gst",
60 feature = "hbt",
61 feature = "hdg",
62 feature = "hdm",
63 feature = "hdt",
64 feature = "mda",
65 feature = "mtw",
66 feature = "mwd",
67 feature = "mwv",
68 feature = "pashr",
69 feature = "pgrme",
70 feature = "pskpdpt",
71 feature = "rmb",
72 feature = "rmc",
73 feature = "rot",
74 feature = "rpm",
75 feature = "rsa",
76 feature = "rsd",
77 feature = "rte",
78 feature = "ths",
79 feature = "tll",
80 feature = "ttm",
81 feature = "txt",
82 feature = "vbw",
83 feature = "vdr",
84 feature = "vhw",
85 feature = "vlw",
86 feature = "vtg",
87 feature = "vwr",
88 feature = "vwt",
89 feature = "wcv",
90 feature = "wpl",
91 feature = "xdr",
92 feature = "xte",
93 feature = "zda",
94 ))]
95 $item
96 };
97}
98
99nmea_item! { pub mod nmea; }
100
101#[cfg(feature = "ais")]
102pub mod ais;
103
104pub use error::*;
105pub use frame::*;
106
107nmea_item! { pub use nmea::NmeaSentence; }
108nmea_item! { pub use nmea::NmeaEncodable; }