pub struct PacketRateBudget { /* private fields */ }Expand description
Caller-reset packet-rate budget.
Implementations§
Source§impl PacketRateBudget
impl PacketRateBudget
Sourcepub const fn new(limit: u64) -> Self
pub const fn new(limit: u64) -> Self
Creates a packet-rate budget with limit allowed packets per
caller-owned window.
Examples found in repository?
examples/service_toolkit.rs (line 13)
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}Sourcepub fn try_consume(&mut self) -> RateLimitDecision
pub fn try_consume(&mut self) -> RateLimitDecision
Attempts to consume one packet from the current budget.
Examples found in repository?
examples/service_toolkit.rs (line 17)
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}Trait Implementations§
Source§impl Clone for PacketRateBudget
impl Clone for PacketRateBudget
Source§fn clone(&self) -> PacketRateBudget
fn clone(&self) -> PacketRateBudget
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for PacketRateBudget
impl Debug for PacketRateBudget
Source§impl PartialEq for PacketRateBudget
impl PartialEq for PacketRateBudget
impl Copy for PacketRateBudget
impl Eq for PacketRateBudget
impl StructuralPartialEq for PacketRateBudget
Auto Trait Implementations§
impl Freeze for PacketRateBudget
impl RefUnwindSafe for PacketRateBudget
impl Send for PacketRateBudget
impl Sync for PacketRateBudget
impl Unpin for PacketRateBudget
impl UnsafeUnpin for PacketRateBudget
impl UnwindSafe for PacketRateBudget
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more