Skip to main content

service_toolkit/
service_toolkit.rs

1use 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}