aprs_is/lib.rs
1//! APRS-IS (APRS Internet Service) TCP client.
2//!
3//! Connects to APRS-IS core/tier2 servers, authenticates with
4//! callsign+passcode, subscribes to filters, receives APRS packets
5//! as TNC2-format text lines, and gates RF-heard traffic with
6//! Q-construct rules.
7//!
8//! # Scope
9//!
10//! - [`AprsIsClient`] async TCP client with keepalive and bounded reader.
11//! - [`AprsIsConfig`] login configuration, [`aprs_is_passcode`] hash.
12//! - [`AprsIsFilter`] filter-command builder.
13//! - [`QConstruct`] Q-construct classification + `IGate` path rewriting.
14//! - [`parse_is_line`] TNC2 monitor-format parser.
15//! - [`format_is_packet`] outbound line formatter.
16//!
17//! # References
18//!
19//! - APRS-IS: <http://www.aprs-is.net/>
20//! - Q-construct: <http://www.aprs-is.net/q.aspx>
21
22// The `aprs` crate is declared as a dep so downstream crates (e.g.
23// thd75) can rely on a single version line across both crates and so
24// future helpers in aprs-is can use its types without a Cargo.toml
25// churn. aprs-is itself stays transport/format-focused and does not
26// reach into the APRS info-field parsers, so the dep is acknowledged
27// here to keep `-D unused-crate-dependencies` happy.
28use aprs as _;
29
30// `proptest` is a dev-dependency used only in the integration test
31// suites. Acknowledge it here to keep `-D unused-crate-dependencies`
32// happy when the lib test crate compiles with dev-deps in scope.
33#[cfg(test)]
34use proptest as _;
35
36mod client;
37mod error;
38mod events;
39mod filter;
40mod line;
41mod login;
42mod q_construct;
43
44pub use client::{AprsIsClient, CONNECT_TIMEOUT, KEEPALIVE_INTERVAL};
45pub use error::AprsIsError;
46pub use events::AprsIsEvent;
47pub use filter::AprsIsFilter;
48pub use line::{AprsIsLine, format_is_packet, parse_is_line};
49pub use login::{AprsIsConfig, Passcode, aprs_is_passcode, build_login_string};
50pub use q_construct::{QConstruct, format_is_packet_with_qconstruct};