Skip to main content

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 38 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#[cfg(any(
35    feature = "nmea",
36    feature = "apb",
37    feature = "bwc",
38    feature = "dbk",
39    feature = "dbs",
40    feature = "dbt",
41    feature = "dpt",
42    feature = "dtm",
43    feature = "gbs",
44    feature = "gga",
45    feature = "gll",
46    feature = "gns",
47    feature = "gsa",
48    feature = "gsv",
49    feature = "gst",
50    feature = "hdg",
51    feature = "hdm",
52    feature = "hdt",
53    feature = "mda",
54    feature = "mtw",
55    feature = "mwd",
56    feature = "mwv",
57    feature = "pashr",
58    feature = "pgrme",
59    feature = "pskpdpt",
60    feature = "rmb",
61    feature = "rmc",
62    feature = "rot",
63    feature = "rpm",
64    feature = "rsa",
65    feature = "ths",
66    feature = "txt",
67    feature = "vbw",
68    feature = "vdr",
69    feature = "vhw",
70    feature = "vlw",
71    feature = "vtg",
72    feature = "vwr",
73    feature = "xdr",
74    feature = "xte",
75    feature = "zda",
76))]
77pub mod nmea;
78
79#[cfg(feature = "ais")]
80pub mod ais;
81
82pub use error::*;
83pub use frame::*;
84
85#[cfg(any(
86    feature = "nmea",
87    feature = "apb",
88    feature = "bwc",
89    feature = "dbk",
90    feature = "dbs",
91    feature = "dbt",
92    feature = "dpt",
93    feature = "dtm",
94    feature = "gbs",
95    feature = "gga",
96    feature = "gll",
97    feature = "gns",
98    feature = "gsa",
99    feature = "gsv",
100    feature = "gst",
101    feature = "hdg",
102    feature = "hdm",
103    feature = "hdt",
104    feature = "mda",
105    feature = "mtw",
106    feature = "mwd",
107    feature = "mwv",
108    feature = "pashr",
109    feature = "pgrme",
110    feature = "pskpdpt",
111    feature = "rmb",
112    feature = "rmc",
113    feature = "rot",
114    feature = "rpm",
115    feature = "rsa",
116    feature = "ths",
117    feature = "txt",
118    feature = "vbw",
119    feature = "vdr",
120    feature = "vhw",
121    feature = "vlw",
122    feature = "vtg",
123    feature = "vwr",
124    feature = "xdr",
125    feature = "xte",
126    feature = "zda",
127))]
128pub use nmea::NmeaSentence;
129
130#[cfg(any(
131    feature = "nmea",
132    feature = "apb",
133    feature = "bwc",
134    feature = "dbk",
135    feature = "dbs",
136    feature = "dbt",
137    feature = "dpt",
138    feature = "dtm",
139    feature = "gbs",
140    feature = "gga",
141    feature = "gll",
142    feature = "gns",
143    feature = "gsa",
144    feature = "gsv",
145    feature = "gst",
146    feature = "hdg",
147    feature = "hdm",
148    feature = "hdt",
149    feature = "mda",
150    feature = "mtw",
151    feature = "mwd",
152    feature = "mwv",
153    feature = "pashr",
154    feature = "pgrme",
155    feature = "pskpdpt",
156    feature = "rmb",
157    feature = "rmc",
158    feature = "rot",
159    feature = "rpm",
160    feature = "rsa",
161    feature = "ths",
162    feature = "txt",
163    feature = "vbw",
164    feature = "vdr",
165    feature = "vhw",
166    feature = "vlw",
167    feature = "vtg",
168    feature = "vwr",
169    feature = "xdr",
170    feature = "xte",
171    feature = "zda",
172))]
173pub use nmea::NmeaEncodable;