service_toolkit/
service_toolkit.rs1use libaprs_engine::{
2 parse_packet,
3 service::{
4 DuplicateDecision, DuplicateWindow, PacketRateBudget, RateLimitDecision, SemanticBlocklist,
5 SemanticFamily,
6 },
7 Engine,
8};
9
10fn main() -> Result<(), libaprs_engine::ParseError> {
11 let mut engine = Engine::default();
12 let mut duplicates = DuplicateWindow::new(128);
13 let mut rate = PacketRateBudget::new(100);
14 let blocked = SemanticBlocklist::new(&[SemanticFamily::Unsupported, SemanticFamily::Malformed]);
15
16 for packet_bytes in [b"N0CALL>APRS:>service".as_slice()] {
17 if rate.try_consume() == RateLimitDecision::Limited {
18 continue;
19 }
20 if duplicates.observe(packet_bytes) == DuplicateDecision::Duplicate {
21 continue;
22 }
23
24 let packet = parse_packet(packet_bytes)?;
25 if blocked.rejects(&packet.aprs_data()) {
26 continue;
27 }
28
29 let _event = engine.process_event(packet.raw().as_bytes());
30 }
31
32 Ok(())
33}